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
undSec-WebSocket-Accept
werden anstelle der drei Schlüssel von HyBi 00 hinzugefügt. Der Browser gibtSec-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., umSec-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 vonnew 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 Funktionclose()
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.