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 apportate, insieme ad alcune note sulle implementazioni attuali.

Che cosa è cambiato rispetto a 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 il numero generato in modo casuale a Sec-WebSocket-Key. Il server lo utilizza con il GUID (258EAFA5-E914-47DA-95CA-C5AB0DC85B11) e SHA1 / BASE64 specifici del protocollo WebSocket e così via per restituire Sec-WebSocket-Accept in modo che il browser possa confermare di comprendere WebSocket. In questo modo si evita un attacco cross-protocol.
  • In ogni frame, ora è obbligatorio il mascheramento del frame. In questo modo si evita l'attacco di 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 Origin di HyBi 00 per impedire l'accesso da script non noti al fornitore di servizi. Tieni presente che su HyBi 11 sarà semplicemente "Origin".

Modifiche all'API JS

  • Ora subprotocol può 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 (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 è stato aggiunto. Le estensioni proposte sono:
  • deflate-frame comprime i frame all'origine ed estrae quelli di 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 del server possono supportare sia HyBi 00 che HyBi 10 esaminando l'intestazione HTTP dell'handshake. Tuttavia, non è consigliabile supportare HyBi 00 perché è noto per essere vulnerabile.
  • L'API JavaScript WebSocket è molto simile tra le versioni precedenti e quelle nuove. 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.