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, 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 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 ö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 ve new 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.