Unterschiede beim neuen WebSocket-Protokoll

Die WebSocket-Protokollspezifikation wurde vor Kurzem aktualisiert, um frühere Sicherheitsbedenken zu beheben. Sie ist jetzt weitgehend stabil. Im Folgenden finden Sie eine Zusammenfassung der Änderungen sowie einige Hinweise zu aktuellen Implementierungen.

Was hat sich seit WebSocket HyBi 00 geändert?

  • Das Protokoll-Frame-Format wurde geändert. Bei HyBi 00 wurde für jeden Frame "0x00" für den Anfang und "0xff" für das Ende verwendet. HyBi 10 verwendet jetzt das folgende neue Format:
      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 ...                |
     +---------------------------------------------------------------+

Sicherheitsprobleme wurden behoben

  • Sec-WebSocket-Key und Sec-WebSocket-Accept werden anstelle der drei Schlüssel von HyBi 00 hinzugefügt. Der Browser gibt Sec-WebSocket-Key eine zufällig generierte Zahl. Der Server verwendet sie dann mit der GUID (258EAFA5-E914-47DA-95CA-C5AB0DC85B11) des WebSocket-Protokolls und SHA1 / BASE64 usw., um Sec-WebSocket-Accept zurückzugeben, damit der Browser bestätigen kann, dass er WebSocket versteht. So wird ein protokollübergreifender Angriff verhindert.
  • Für jeden Frame ist jetzt eine Frame-Maskierung erforderlich. So wird Cache-Poisoning auf dem Proxy verhindert. Sec-WebSocket-Origin wird hinzugefügt, um den Zugriff von Scripts zu verhindern, die dem Dienstanbieter nicht bekannt sind.
  • Sec-WebSocket-Origin wird anstelle des Ursprungsschlüssels von HyBi 00 eingefügt, um den Zugriff von Scripts zu verhindern, die dem Dienstanbieter nicht bekannt sind. Bei HyBi 11 ist das nur „Origin“.

Änderungen an der JS API

  • subprotocol kann jetzt ein Array sein, was eine Methodensignatur von new WebSocket(String url, Array subprotocol) ermöglicht
  • .protocol-Attribut [String]
  • .binaryType-Attribut [Blob|ArrayBuffer]
  • .extension [String]
  • Der Statuscode und der Grund, warum die Verbindung geschlossen wurde, wurden CloseEvent hinzugefügt. Die Funktion close() wurde ebenfalls geändert, damit sie diese beiden Argumente akzeptiert.

Erweiterungen

  • Sec-WebSocket-Extensions wurde hinzugefügt. Vorgeschlagene Erweiterungen:
  • Bei deflate-frame werden Frames an der Quelle komprimiert und am Ziel extrahiert.
  • x-google-mux, um Multiplexing zu unterstützen, befindet sich aber noch in der Anfangsphase.

Ist HyBi 00 sowohl mit der Server- als auch der Browserimplementierung von HyBi 10 kompatibel?

  • Serverimplementierungen können sowohl HyBi 00 als auch HyBi 10 unterstützen, indem sie den HTTP-Handshake-Header prüfen. Es wird jedoch nicht empfohlen, HyBi 00 zu unterstützen, da es bekanntlich anfällig ist.
  • Die WebSocket JavaScript API ist in der alten und der neuen Version weitgehend identisch. Wie bereits erwähnt, empfehlen wir jedoch nicht, HyBi 00 zu unterstützen, da es bekanntermaßen anfällig ist.

Welche Browser unterstützen HyBi 10?

  • Chrome 14 unterstützt das HyBi 10-Protokoll, die oben genannten Änderungen an der WebSocket JavaScript API sind jedoch noch nicht verfügbar. Auch Firefox 7 soll HyBi 10 unterstützen.