Die WebSocket-Protokollspezifikation wurde vor Kurzem aktualisiert, um frühere Sicherheitsprobleme zu lösen, und ist weitgehend stabil. Nachfolgend finden Sie eine Zusammenfassung der Änderungen sowie einige Hinweise zu den aktuellen Implementierungen.
Was hat sich seit WebSocket HyBi 00 geändert?
- Das Protokollframe-Format wurde geändert. Mit HyBi 00 wurden
"0x00"
für den Kopf und"0xff"
für das Ende für jeden Frame verwendet. HyBi 10 verwendet jetzt ein neues Format wie das folgende:
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 weistSec-WebSocket-Key
eine zufällig generierte Zahl zu. Der Server verwendet ihn dann mit der spezifischen GUID (258EAFA5-E914-47DA-95CA-C5AB0DC85B11
) und SHA1 / BASE64 des WebSocket-Protokolls, umSec-WebSocket-Accept
zurückzugeben, sodass der Browser bestätigen kann, dass er WebSocket versteht. Dies verhindert protokollübergreifende Angriffe.- Auf jedem Frame ist nun eine Frame-Maskierung erforderlich. Dies verhindert Cache-Poisoning auf dem Proxy.
Sec-WebSocket-Origin
wird hinzugefügt, um den Zugriff von Skripts zu verhindern, die dem Dienstanbieter nicht bekannt sind. Sec-WebSocket-Origin
wird anstelle des Ursprungsschlüssels von HyBi 00 hinzugefügt, um den Zugriff über Skripts zu verhindern, die dem Dienstanbieter nicht bekannt sind. Auf HyBi 11 ist dies nur „Origin
“.
JS API-Änderungen
subprotocol
kann jetzt ein Array sein, was die Methodensignaturnew WebSocket(String url, Array subprotocol)
zulässt- Attribut
.protocol
[String] - Attribut
.binaryType
[Blob|ArrayBuffer] .extension
[String]- Statuscode und Grund (warum die Verbindung getrennt wurde) wurden
CloseEvent
hinzugefügt. Die Funktionclose()
wurde ebenfalls so geändert, dass sie diese beiden Argumente akzeptiert.
Erweiterungen
Sec-WebSocket-Extensions
wurde hinzugefügt. Folgende Erweiterungen werden vorgeschlagen:- Mit
deflate-frame
werden Frames an der Quelle komprimiert und am Ziel extrahiert. x-google-mux
unterstützt Multiplexing, befindet sich aber in einer frühen Phase.
Ist HyBi 00 und HyBi 10 sowohl in der Server- als auch in der Browserimplementierung kompatibel?
- Serverimplementierungen können sowohl HyBi 00 als auch HyBi 10 unterstützen, indem der HTTP-Header des Handshakes geprüft wird. Es wird jedoch nicht empfohlen, HyBi 00 zu unterstützen, da es bekanntermaßen angreifbar ist.
- Die WebSocket JavaScript API ist zwischen der alten und der neuen Version weitgehend ähnlich. Wie oben erwähnt, raten wir jedoch davon ab, HyBi 00 zu unterstützen, da es bekanntermaßen gefährdet ist.
Welche Browser unterstützen HyBi 10?
- Chrome 14 unterstützt das HyBi 10-Protokoll, obwohl die oben genannten WebSocket JavaScript API-Änderungen noch in Arbeit sind. Außerdem soll HyBi 10 in Firefox 7 unterstützt werden.