En quoi le nouveau protocole WebSocket est-il différent ?

Eiji Kitamura
Eiji Kitamura

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 et Sec-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 renvoyer Sec-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éthode new 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 fonction close() 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.