WebSocket protokolü spesifikasyonu, kısa süre önce önceki güvenlik sorunlarını çözmek için güncellendi ve büyük ölçüde kararlı. Aşağıda, söz konusu değişikliklerin bir özeti ve mevcut uygulamalarla ilgili bazı notlar bulunmaktadır.
WebSocket HyBi 00'dan bu yana neler değişti?
- Protokol çerçevesi biçimi değiştirildi. HyBi 00, her kare için baş için
"0x00"
ve kuyruk için"0xff"
kullanırdı. HyBi 10 artık aşağıdaki gibi yeni bir biçim kullanıyor:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-------+-+-------------+-------------------------------+
|F|R|R|R| opcode|M| Payload len | Extended payload length |
|I|S|S|S| (4) |A| (7) | (16/63) |
|N|V|V|V| |S| | (if payload len==126/127) |
| |1|2|3| |K| | |
+-+-+-+-+-------+-+-------------+ - - - - - - - - - - - - - - - +
| Extended payload length continued, if payload len == 127 |
+ - - - - - - - - - - - - - - - +-------------------------------+
| |Masking-key, if MASK set to 1 |
+-------------------------------+-------------------------------+
| Masking-key (continued) | Payload Data |
+-------------------------------- - - - - - - - - - - - - - - - +
: Payload Data continued ... :
+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
| Payload Data continued ... |
+---------------------------------------------------------------+
Güvenlik sorunları giderildi
- HyBi 00'ın üç anahtarı yerine
Sec-WebSocket-Key
veSec-WebSocket-Accept
eklenir. Tarayıcı, rastgele oluşturulan sayıyıSec-WebSocket-Key
değişkenine verir. Ardından sunucu, WebSocket protokolüne özgü GUID (258EAFA5-E914-47DA-95CA-C5AB0DC85B11
) ve SHA1 / BASE64 vb. ile birlikte kullanarakSec-WebSocket-Accept
döndürür. Böylece tarayıcı, WebSocket'i anladığını onaylayabilir. Bu, protokoller arası saldırıları önler. - Artık her karede kare maskeleme gereklidir. Bu, proxy'de önbellek zehirlenmesini önler.
Sec-WebSocket-Origin
, servis sağlayıcının farkında olmadığı komut dosyalarından erişilmesini önlemek için eklendi. - Hizmet sağlayıcının bilmediği komut dosyalarından erişimi önlemek için HyBi 00'ın Origin anahtarı yerine
Sec-WebSocket-Origin
eklenir. HyBi 11'de bunun yalnızca "Origin
" olacağını unutmayın.
JS API değişiklikleri
subprotocol
artık dizi olabilir venew WebSocket(String url, Array subprotocol)
yöntem imzasına izin verir.protocol
özelliği [String].binaryType
özelliği [Blob|ArrayBuffer].extension
[Dize]- Durum kodu ve nedeni (bağlantının neden kapatıldığı)
CloseEvent
alanına eklendi.close()
işlevi de bu iki bağımsız değişkeni uygun şekilde kabul edecek şekilde değiştirildi.
Uzantılar
Sec-WebSocket-Extensions
eklendi. Önerilen uzantılar şunlardır:deflate-frame
, kaynakta sıkıştırılan ve hedefte çıkarılan kareleri oluşturur.x-google-mux
çoklu yayını desteklemek için kullanılsa da henüz erken aşamadadır.
Hem sunucu hem de tarayıcı uygulamasında HyBi 00 ile HyBi 10 arasında uyumluluk var mı?
- Sunucu uygulamaları, el sıkışma HTTP üst bilgisine bakarak hem HyBi 00 hem de HyBi 10'u destekleyebilir. Ancak HyBi 00'un güvenlik açığı olduğu bilindiğinden bu cihazın desteklenmesi önerilmez.
- WebSocket JavaScript API'si, eski ve yeni sürümler arasında büyük ölçüde benzerdir. Ancak yukarıda belirtildiği gibi, HyBi 00'ın savunmasız olduğu bilindiği için desteğinizi önermiyoruz.
HyBi 10'u hangi tarayıcılar destekliyor?
- Chrome 14, HyBi 10 protokolünü desteklemektedir. Ancak yukarıda bahsedilen WebSocket JavaScript API değişiklikleri henüz gelişme aşamasındadır. Firefox 7'nin HyBi 10'u desteklemesi de planlanmaktadır.