WebSocket protokol spesifikasyonu, önceki güvenlik sorunlarını çözmek için kısa süre önce güncellenmiştir ve büyük ölçüde kararlıdır. Aşağıda, ilgili değişikliklerin bir özeti ve mevcut uygulamalara ilişkin bazı notlar bulunmaktadır.
WebSocket HyBi 00'den bu yana neler değişti?
- Protokol çerçevesi biçimi değiştirildi. HyBi 00, her karede baş için
"0x00"
ve kuyruk için"0xff"
kullanıyordu. HyBi 10 artık aşağıdaki gibi yeni biçimi 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 üç tuşunun yerine
Sec-WebSocket-Key
veSec-WebSocket-Accept
eklendi. Tarayıcı, rastgele oluşturulmuş sayıyıSec-WebSocket-Key
adresine gönderir. Ardından sunucu, tarayıcının WebSocket'i anladığını onaylayabilmesi içinSec-WebSocket-Accept
değerini döndürmek için WebSocket protokolüne özgü GUID (258EAFA5-E914-47DA-95CA-C5AB0DC85B11
) ve SHA1 / BASE64 vb. ile kullanır. Bu sayede protokoller arası saldırılar önlenir. - Artık her karede çerçeve maskeleme zorunludur. Bu, proxy'de önbellek zehirlenmesini önler. Servis sağlayıcının farkında olmadığı komut dosyalarının erişimini engellemek için
Sec-WebSocket-Origin
eklenmiştir. - Servis sağlayıcının farkında olmadığı komut dosyalarının erişimini engellemek için HyBi 00'ın Kaynak anahtarının yerine
Sec-WebSocket-Origin
eklenir. HyBi 11'de bunun sadece "Origin
" olacağını unutmayın.
JS API değişiklikleri
subprotocol
artıknew WebSocket(String url, Array subprotocol)
yöntemi imzasına izin verecek şekilde diziye dönüştürülebilir.protocol
özelliği [String].binaryType
özelliği [Blob|ArrayBuffer].extension
[Dize]- Durum kodu ve nedeni (bağlantının neden kapatıldığı)
CloseEvent
öğesine 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.- Çoğullamayı destekleyecek, ancak başlangıç aşamasında olan
x-google-mux
.
Hem sunucu hem de tarayıcı uygulamasında HyBi 00 ve HyBi 10 arasında uyumluluk var mı?
- Sunucu uygulamaları, el sıkışma HTTP başlığına bakarak hem HyBi 00 hem de HyBi 10'u destekleyebilir. Ancak, HyBi 00'ün savunmasız olduğu bilindiği için desteklenmesi önerilmez.
- WebSocket JavaScript API, 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 desteklenmesini önermeyiz.
Hangi tarayıcı HyBi 10'u destekler?
- Chrome 14, HyBi 10 protokolünü destekler, ancak yukarıda bahsedilen WebSocket JavaScript API değişiklikleri hâlâ yolda. Firefox 7'nin de HyBi 10'u desteklemesi planlanıyor.