De WebSocket-protocolspecificatie is onlangs bijgewerkt om eerdere beveiligingsproblemen op te lossen en is grotendeels stabiel. Hieronder vindt u een samenvatting van de betrokken wijzigingen, samen met enkele opmerkingen over de huidige implementaties.
Wat is er veranderd sinds WebSocket HyBi 00?
- Het protocolframeformaat is gewijzigd. HyBi 00 gebruikte voor elk frame
"0x00"
voor kop en"0xff"
voor staart. HyBi 10 gebruikt nu een nieuw formaat, zoals het volgende:
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 ... |
+---------------------------------------------------------------+
Beveiligingsproblemen zijn aangepakt
-
Sec-WebSocket-Key
enSec-WebSocket-Accept
zijn toegevoegd in plaats van de drie sleutels van HyBi 00. De browser geeft een willekeurig gegenereerd nummer aanSec-WebSocket-Key
. Vervolgens gebruikt de server het met de specifieke GUID van het WebSocket-protocol (258EAFA5-E914-47DA-95CA-C5AB0DC85B11
) en SHA1 / BASE64, enz. omSec-WebSocket-Accept
te retourneren, zodat de browser kan bevestigen dat hij WebSocket begrijpt. Dit voorkomt een cross-protocol aanval. - Op elk frame is nu framemaskering vereist. Dit voorkomt cachevergiftiging op proxy.
Sec-WebSocket-Origin
is toegevoegd om toegang te voorkomen van scripts waarvan de serviceprovider niet op de hoogte is. -
Sec-WebSocket-Origin
wordt toegevoegd in plaats van de Origin-sleutel van HyBi 00 om toegang te voorkomen door scripts waarvan de serviceprovider niet op de hoogte is. Merk op dat dit gewoon "Origin
" is op HyBi 11.
JS API-wijzigingen
-
subprotocol
kan nu een array zijn, waardoor een methodehandtekening vannew WebSocket(String url, Array subprotocol)
mogelijk is -
.protocol
attribuut [String] -
.binaryType
-kenmerk [Blob|ArrayBuffer] -
.extension
[String] - Statuscode en reden (waarom de verbinding is gesloten) zijn toegevoegd aan
CloseEvent
. De functieclose()
is ook gewijzigd om deze twee argumenten dienovereenkomstig te accepteren.
Extensies
-
Sec-WebSocket-Extensions
is toegevoegd. Voorgestelde uitbreidingen zijn: -
deflate-frame
maakt frames gecomprimeerd bij de bron en geëxtraheerd op de bestemming. -
x-google-mux
om multiplexing te ondersteunen, maar bevindt zich in een vroeg stadium.
Is er compatibiliteit tussen HyBi 00 en HyBi 10 bij zowel server- als browserimplementatie?
- Serverimplementaties kunnen zowel HyBi 00 als HyBi 10 ondersteunen door naar de handshake HTTP-header te kijken. Het wordt echter niet aanbevolen om HyBi 00 te ondersteunen, omdat bekend is dat het kwetsbaar is.
- De WebSocket JavaScript API is grotendeels vergelijkbaar tussen oude en nieuwe versies. Maar zoals hierboven vermeld, raden we niet aan om HyBi 00 te ondersteunen, omdat bekend is dat het kwetsbaar is.
Welke browser ondersteunt HyBi 10?
- Chrome 14 ondersteunt het HyBi 10-protocol, hoewel de hierboven genoemde WebSocket JavaScript API-wijzigingen nog onderweg zijn. Firefox 7 is ook gepland om HyBi 10 te ondersteunen.