Yeni WebSocket protokolündeki farklar

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 ve Sec-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 kullanarak Sec-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 ve new 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.