La spécification du protocole WebSocket a récemment été mise à jour pour résoudre les problèmes de sécurité précédents. Elle est désormais largement stable. Vous trouverez ci-dessous un résumé des modifications apportées, ainsi que quelques remarques sur les implémentations actuelles.
Qu'est-ce qui a changé depuis WebSocket HyBi 00 ?
- Le format de la trame de protocole a été modifié. HyBi 00 utilisait
"0x00"
pour la tête et"0xff"
pour la queue pour chaque frame. 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
Sec-WebSocket-Key
etSec-WebSocket-Accept
sont ajoutés à la place des trois clés d'HyBi 00. Le navigateur transmet un nombre généré de manière aléatoire àSec-WebSocket-Key
. Le serveur l'utilise ensuite avec le GUID spécifique du protocole WebSocket (258EAFA5-E914-47DA-95CA-C5AB0DC85B11
) et SHA1 / BASE64, etc. pour renvoyerSec-WebSocket-Accept
afin que le navigateur puisse confirmer qu'il comprend WebSocket. Cela empêche une attaque interprotocole.- Le masquage de frame est désormais obligatoire pour chaque frame. Cela évite l'empoisonnement du cache sur le proxy.
Sec-WebSocket-Origin
est ajouté pour empêcher l'accès des scripts dont le fournisseur de services n'a pas connaissance. Sec-WebSocket-Origin
est ajouté à la place de la clé d'origine de HyBi 00 pour empêcher l'accès des scripts dont le fournisseur de services n'a pas connaissance. Notez que ce sera simplement "Origin
" sur HyBi 11.
Modifications apportées à l'API JavaScript
subprotocol
peut désormais être un tableau, ce qui permet d'utiliser 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 la raison (pourquoi la connexion est fermée) ont été ajoutés à
CloseEvent
. La fonctionclose()
a également été modifiée pour accepter ces deux arguments.
Extensions
Sec-WebSocket-Extensions
a été ajouté. Les extensions proposées sont les suivantes:deflate-frame
compresse les images à la source et les extrait à la destination.x-google-mux
pour prendre en charge le multiplexage, mais il en est encore à ses débuts.
La compatibilité entre HyBi 00 et HyBi 10 est-elle possible à la fois pour l'implémentation du serveur et du navigateur ?
- Les implémentations de serveur peuvent prendre en charge HyBi 00 et HyBi 10 en examinant l'en-tête HTTP de l'établissement de la liaison. Toutefois, il est déconseillé de prendre en charge HyBi 00, car il est connu pour être vulnérable.
- L'API JavaScript WebSocket est largement similaire entre les anciennes et les nouvelles versions. 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 ne soient pas encore disponibles. Firefox 7 devrait également prendre en charge HyBi 10.