Cosa c'è di diverso nel nuovo protocollo WebSocket

Eiji Kitamura
Eiji Kitamura

La specifica del protocollo WebSocket è stata recentemente aggiornata per risolvere precedenti problemi di sicurezza ed è ampiamente stabile. Di seguito è riportato un riepilogo delle modifiche interessate, oltre ad alcune note sulle implementazioni correnti.

Cosa è cambiato rispetto a WebSocket HyBi 00?

  • Il formato del frame del protocollo è stato modificato. HyBi 00 utilizzato per utilizzare "0x00" per la testa e "0xff" per la coda per ogni frame. HyBi 10 ora utilizza un nuovo formato come il seguente:
      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 ...                |
     +---------------------------------------------------------------+

I problemi di sicurezza sono stati risolti

  • Sec-WebSocket-Key e Sec-WebSocket-Accept vengono aggiunti al posto dei tre tasti di HyBi 00. Il browser fornisce un numero generato in modo casuale a Sec-WebSocket-Key. Quindi, il server lo utilizza con il GUID (258EAFA5-E914-47DA-95CA-C5AB0DC85B11) e SHA1 / BASE64 specifici del protocollo WebSocket per restituire Sec-WebSocket-Accept in modo che il browser possa confermare che comprende WebSocket. Ciò impedisce un attacco multiprotocollo.
  • Ora è richiesto il mascheramento dei frame su ogni frame. Questo impedisce l'inquinamento della cache sul proxy. Sec-WebSocket-Origin viene aggiunto per impedire l'accesso da script di cui il fornitore di servizi non è a conoscenza.
  • Sec-WebSocket-Origin viene aggiunto al posto della chiave di origine di HyBi 00 per impedire l'accesso da script di cui il fornitore di servizi non è a conoscenza. Tieni presente che sarà solo "Origin" su HyBi 11.

Modifiche all'API JS

  • subprotocol può ora essere un array, consentendo una firma del metodo di new WebSocket(String url, Array subprotocol)
  • Attributo .protocol [Stringa]
  • Attributo .binaryType [Blob|ArrayBuffer]
  • .extension [Stringa]
  • Il codice di stato e il motivo (per cui la connessione è stata chiusa) sono stati aggiunti a CloseEvent. Anche la funzione close() è stata modificata in modo da accettare questi due argomenti di conseguenza.

Estensioni

  • Sec-WebSocket-Extensions aggiunto. Le estensioni proposte sono:
  • deflate-frame crea i frame compressi all'origine ed estratti a destinazione.
  • x-google-mux per supportare il multiplexing, ma è in fase iniziale.

Esiste una compatibilità tra HyBi 00 e HyBi 10 sia nell'implementazione del server che del browser?

  • Le implementazioni server possono supportare sia HyBi 00 che HyBi 10 osservando l'intestazione HTTP di handshake. Tuttavia, non è consigliabile supportare HyBi 00 poiché è noto che sia vulnerabile.
  • L'API WebSocket JavaScript è molto simile tra la versione precedente e quella nuova. Tuttavia, come indicato sopra, sconsigliamo di supportare HyBi 00 poiché è noto che sia vulnerabile.

Quale browser supporta HyBi 10?

  • Chrome 14 supporta il protocollo HyBi 10, anche se le modifiche all'API WebSocket JavaScript menzionate sopra sono ancora in arrivo. Anche Firefox 7 dovrebbe supportare HyBi 10.