De specificatie van het WebSocket-protocol is onlangs bijgewerkt om eerdere beveiligingsproblemen op te lossen en is grotendeels stabiel. Hieronder vindt u een overzicht van de wijzigingen, samen met enkele opmerkingen over de huidige implementaties.
Wat is er veranderd sinds WebSocket HyBi 00?
- Het protocolframeformaat is gewijzigd. HyBi 00 gebruikte voorheen
"0x00"
voor de kop en"0xff"
voor de staart van elk frame. HyBi 10 gebruikt nu een nieuw formaat, zoals hieronder:
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 ... |
+---------------------------------------------------------------+
Er zijn beveiligingsproblemen aangepakt
-
Sec-WebSocket-Key
enSec-WebSocket-Accept
worden toegevoegd in plaats van de drie sleutels van HyBi 00. De browser geeft een willekeurig gegenereerd nummer aanSec-WebSocket-Key
. Vervolgens gebruikt de server dit 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. - Framemaskering is nu vereist voor elk frame. Dit voorkomt cachevergiftiging op proxyservers.
Sec-WebSocket-Origin
is toegevoegd om toegang te voorkomen via scripts waarvan de serviceprovider niet op de hoogte is. -
Sec-WebSocket-Origin
is toegevoegd ter vervanging van de Origin-sleutel van HyBi 00 om toegang te voorkomen vanuit scripts waarvan de serviceprovider niet op de hoogte is. Let op: dit zal in HyBi 11 gewoon "Origin
" zijn.
JS API-wijzigingen
-
subprotocol
kan nu een array zijn, waardoor een methodehandtekening vannew WebSocket(String url, Array subprotocol)
mogelijk is -
.protocol
kenmerk [Tekenreeks] -
.binaryType
-kenmerk [Blob|ArrayBuffer] -
.extension
[Tekenreeks] - Statuscode en reden (waarom de verbinding wordt verbroken) zijn toegevoegd aan
CloseEvent
. De functieclose()
is ook aangepast om deze twee argumenten te accepteren.
Uitbreidingen
-
Sec-WebSocket-Extensions
is toegevoegd. De voorgestelde extensies zijn: -
deflate-frame
zorgt ervoor dat frames bij de bron worden gecomprimeerd en bij de bestemming worden geëxtraheerd. -
x-google-mux
om multiplexing te ondersteunen, maar bevindt zich nog in een vroeg stadium.
Is er compatibiliteit tussen HyBi 00 en HyBi 10 op zowel de server- als de browserimplementatie?
- Serverimplementaties kunnen zowel HyBi 00 als HyBi 10 ondersteunen door naar de handshake HTTP-header te kijken. Het wordt echter afgeraden 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 ondersteuning voor HyBi 00 af, omdat bekend is dat deze kwetsbaar is.
Welke browsers ondersteunen HyBi 10?
- Chrome 14 ondersteunt het HyBi 10-protocol, hoewel de bovengenoemde wijzigingen in de WebSocket JavaScript API nog in de maak zijn. Firefox 7 zal naar verwachting ook HyBi 10 ondersteunen.