WebSocket Security: Mitler ve Gerçekler

WebSocket: Mitler ve Gerçekler
WebSocket, gerçek zamanlı iletişim için ortaya çıkmış güçlü bir protokol. Son yıllarda teknik şartnamelerde, ihalelerde ya da üretici sunumlarında sürekli “WebSocket desteği”, “deep inspection” gibi ifadeler geçiyor. Bazı üreticiler de bunu pazarlama malzemesi haline getirmiş durumda.
Ama işin gerçeği şu: WebSocket faydalı bir araç olabilir ama anlatıldığı kadar da “oyun değiştirici” değil.
WebSocket Nasıl Çalışıyor?
İlk bakışta WebSocket, sıradan bir HTTP isteği gibi başlıyor. İstemci önce bir handshake yapıyor, ardından bağlantı “upgrade” edilerek sürekli açık kalan bir TCP tüneline dönüşüyor.
Bunun sonucunda:
-
Tek bir bağlantı üzerinden karşılıklı iletişim kuruluyor,
-
İçeride JSON, XML, Protobuf ya da bambaşka bir binary veri taşınabiliyor,
-
Yani artık klasik request/response mantığı işlemiyor, sürekli akan bir kanal var.
Bu yüzden “her mesajı tek tek inceleyelim” fikri, HTTP’de olduğu kadar kolay ya da mantıklı değil.
Mit 1: WebSocket Her Zaman Derinlemesine Analiz Edilmeli
Sunumlarda sıkça duyduğumuz bu söylem, pratikte pek de karşılığı olan bir şey değil. Çünkü:
-
Her mesajı tek tek parse etmek ciddi performans kaybı yaratıyor,
-
WAF çoğu zaman uygulamanın özel protokolünü tanımıyor; çıkan sonuç da bir işe yaramıyor.
Daha mantıklı olan şey, bağlantının doğru açıldığını ve anomalileri takip etmek.
Mit 2: WebSocket Tek Başına Güvenlik Açığıdır
WebSocket’in kendisi bir açık değil. Asıl problem genelde üzerinde taşınan veride ya da backend tarafındaki hatalarda çıkıyor.
Bir örnek: Chat uygulamasında SQL injection varsa, bu WebSocket yüzünden değil, uygulama kodundaki zafiyet yüzünden olur.
WAF’in rolü burada daha çok:
-
Bağlantının güvenli kurulup kurulmadığını kontrol etmek,
-
Çok uzun frame, flood denemesi ya da garip opcode’lar gibi anormallikleri engellemek.
WebSocket Güvenliği Açısından CPU/RAM Kullanımı
WebSocket’in pek konuşulmayan bir tarafı var: Kaynak tüketimi.
-
Sürekli açık bağlantılar RAM ve CPU’yu yorar. Binlerce bağlantıda bu gayet hissedilir hale gelir.
-
Ping/pong gibi bağlantıyı canlı tutan paketler, yüksek kullanıcı sayısında ekstra CPU yükü demektir.
-
JSON parse işlemleri CPU’ya yük bindirir. Binary protokoller daha verimlidir ama sonuçta ücretsiz değildir.
-
Çoğu zaman asıl darboğaz protokol değil, uygulamanın concurrency yönetimidir.
Kısacası WebSocket “kaynak tüketmeyen sihirli bir kanal” değil. Üstüne deep inspection gibi işler eklendiğinde yük daha da artıyor. Bunu her cümlesinde WebSocket vurgulayan şirketlerin, mevcut müşterilerinin ortalama CPU/RAM kullanımlarını sorduğunuzda aslında gerekli cevabı alıyorsunuz.
Güvenlik
WebSocket güvenliğinde dikkat edilmesi gereken şeyler aslında belli:
-
Bağlantıyı bir proxy ya da gateway üzerinden kimlik doğrulamayla açmak,
-
Anormal trafik (uzun frame, flood/DoS, geçersiz opcode) tespit etmek,
-
Trafiği mutlaka loglayıp izlemek,
-
Asıl güvenliği backend tarafında sağlamak.
WAF tek başına yeterli değil; WAF + API Gateway + uygulama güvenliği birlikte ele alındığında gerçek koruma sağlanıyor.
WebSocket faydalı mı? Evet.
Her derde deva mı? Hayır.
Baştan aşağı bir güvenlik riski mi? O da değil.
Onu yasaklamak ya da gözümüzde büyütmek yerine, doğru şekilde kullanmak ve arkasındaki uygulama güvenliğini sağlam tutmak çok daha değerli.
Sonuçta WebSocket önemli bir araç ama pazarlamada çizilen tabloya bakıp da “olmazsa olmaz” diye düşünmek hata olur.