La spécification du protocole WebSocket a été récemment mise à jour pour résoudre les problèmes de sécurité précédents et elle est globalement stable. Vous trouverez ci-dessous un récapitulatif des modifications apportées, ainsi que des remarques sur les implémentations actuelles.
Qu'est-ce qui a été modifié depuis WebSocket HyBi 00 ?
- Le format de trame du protocole a été modifié. HyBi 00 utilise
"0x00"
pour la tête et"0xff"
pour la queue pour chaque image. HyBi 10 utilise désormais un nouveau format, comme celui-ci:
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 ... |
+---------------------------------------------------------------+
Les problèmes de sécurité ont été résolus
- Ajout de
Sec-WebSocket-Key
etSec-WebSocket-Accept
à la place des trois clés du HyBi 00. Le navigateur attribue un nombre généré de manière aléatoire àSec-WebSocket-Key
. Ensuite, le serveur l'utilise avec le GUID (258EAFA5-E914-47DA-95CA-C5AB0DC85B11
) et SHA1 / BASE64 du protocole WebSocket spécifiques du protocole WebSocket, etc. pour renvoyerSec-WebSocket-Accept
afin que le navigateur puisse confirmer qu'il comprend WebSocket. Cela empêche une attaque interprotocole. - Un masquage des images est désormais obligatoire sur chaque image. Cela permet d'éviter tout empoisonnement du cache sur le proxy.
Sec-WebSocket-Origin
est ajouté pour empêcher l'accès à partir de scripts dont le fournisseur de services n'a pas connaissance. - Ajout de
Sec-WebSocket-Origin
à la place de la clé d'origine HyBi 00 pour empêcher l'accès à partir de scripts dont le fournisseur de services n'a pas connaissance. Notez qu'il ne s'agit que de "Origin
" sur HyBi 11.
Modifications apportées à l'API JavaScript
subprotocol
peut désormais être un tableau, ce qui permet une signature de méthodenew WebSocket(String url, Array subprotocol)
- Attribut
.protocol
[Chaîne] - Attribut
.binaryType
[Blob|ArrayBuffer] .extension
[Chaîne]- Le code d'état et le motif (pourquoi la connexion est fermée) ont été ajoutés à
CloseEvent
. La fonctionclose()
a également été modifiée pour accepter ces deux arguments en conséquence.
Extensions
Sec-WebSocket-Extensions
a été ajouté. Les extensions proposées sont les suivantes:deflate-frame
rend les trames compressées à la source et extraites à la destination.x-google-mux
pour prendre en charge le multiplexage, mais en est encore à un stade précoce.
Y a-t-il une compatibilité entre HyBi 00 et HyBi 10 au niveau de l'implémentation du serveur et du navigateur ?
- Les implémentations de serveur peuvent prendre en charge à la fois HyBi 00 et HyBi 10 en examinant l'en-tête HTTP du handshake. Cependant, il est déconseillé de prendre en charge HyBi 00, car il est connu pour être vulnérable.
- L'API JavaScript WebSocket est très similaire entre l'ancienne et la nouvelle version. Toutefois, comme indiqué ci-dessus, nous vous déconseillons de prendre en charge HyBi 00, car il est connu pour être vulnérable.
Quel navigateur est compatible avec HyBi 10 ?
- Chrome 14 est compatible avec le protocole HyBi 10, bien que les modifications de l'API JavaScript WebSocket mentionnées ci-dessus soient toujours en cours. Firefox 7 est également compatible avec HyBi 10.