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. HyBi 00 wurde verwendet, um "0x00" für Kopf und "0xff" für Schwanz für jeden Frame zu verwenden. 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

  • Anstelle der drei Schlüssel von HyBi 00 werden Sec-WebSocket-Key und Sec-WebSocket-Accept 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. Dies verhindert einen protokollübergreifenden Angriff.
  • 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. Hinweis: Auf HyBi 11 ist dies nur „Origin“.

JS API-Änderungen

  • 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, sodass sie diese beiden Argumente entsprechend akzeptiert.

Erweiterungen

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

Gibt es Kompatibilität zwischen HyBi 00 und HyBi 10 sowohl bei der Server- als auch bei der Browserimplementierung?

  • 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, obwohl die oben erwähnten Änderungen an der WebSocket JavaScript API noch nicht abgeschlossen sind. Auch Firefox 7 soll HyBi 10 unterstützen.