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, ilgili değişikliklerin özeti ve mevcut uygulamalarla ilgili bazı notlar verilmiştir.
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 önbelleğe zehirlenme olmasını önler.
Sec-WebSocket-Origin
, hizmet sağlayıcının farkında olmadığı komut dosyalarından erişimi önlemek için eklenir. - 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 [Dize].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
, karelerin kaynakta sıkıştırılmasını ve hedefte ayıklanmasını sağlar.x-google-mux
çoklu yayını desteklemek için ancak 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ı desteklemeniz ö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, güvenlik açığı olduğu bilinen HyBi 00'ı desteklemenizi önermiyoruz.
HyBi 10'u hangi tarayıcılar destekliyor?
- Chrome 14, HyBi 10 protokolünü destekler ancak yukarıda bahsedilen WebSocket JavaScript API değişiklikleri henüz kullanıma sunulmamıştır. Firefox 7'nin HyBi 10'u desteklemesi de planlanmaktadır.