Cosa c'è di diverso nel nuovo protocollo WebSocket

La specifica del protocollo WebSocket è stata recentemente aggiornata per risolvere i problemi di sicurezza precedenti ed è in gran parte stabile. Di seguito è riportato un riepilogo delle modifiche interessate, insieme ad alcune note sulle attuali implementazioni.

Che cosa è cambiato da WebSocket HyBi 00?

  • Il formato del frame del protocollo è stato modificato. HyBi 00 utilizzava "0x00" per la testa e "0xff" per la coda per ogni frame. HyBi 10 ora utilizza il nuovo formato come segue:
      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 delle tre chiavi di HyBi 00. Il browser fornisce a Sec-WebSocket-Key un numero generato in modo casuale. Il server lo utilizza quindi con il GUID (258EAFA5-E914-47DA-95CA-C5AB0DC85B11) specifico, SHA1 / BASE64 e così via del protocollo WebSocket per restituire Sec-WebSocket-Accept in modo che il browser possa confermare che comprende WebSocket. In questo modo si evita un attacco cross-protocol.
  • Su ogni frame, ora è obbligatorio il mascheramento del frame. In questo modo si evita l'avvelenamento della cache sul proxy. Sec-WebSocket-Origin viene aggiunto per impedire l'accesso da script non noti al fornitore di servizi.
  • Sec-WebSocket-Origin viene aggiunto al posto della chiave di origine di HyBi 00 per impedire l'accesso da parte di script di cui il fornitore di servizi non è a conoscenza. Tieni presente che su HyBi 11 sarà solo "Origin".

Modifiche all'API JS

  • Ora subprotocol può essere un array, che consente una firma di metodo new WebSocket(String url, Array subprotocol)
  • Attributo .protocol [Stringa]
  • Attributo .binaryType [Blob|ArrayBuffer]
  • .extension [Stringa]
  • Il codice di stato e il motivo (perché la connessione è 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 rende i frame compressi all'origine ed estratti nella destinazione.
  • x-google-mux per supportare il multiplexing, ma è in una fase iniziale.

Esiste 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 esaminando l'intestazione HTTP dell'handshake. Tuttavia, non è consigliabile supportare HyBi 00 poiché è noto che è vulnerabile.
  • L'API WebSocket JavaScript è molto simile tra la vecchia e la nuova versione. Tuttavia, come indicato sopra, sconsigliamo di supportare HyBi 00 perché è noto per essere vulnerabile.

Quali browser supportano HyBi 10?

  • Chrome 14 supporta il protocollo HyBi 10, anche se le modifiche all'API JavaScript WebSocket sopra menzionate sono ancora in corso. È previsto che anche Firefox 7 supporti HyBi 10.