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
eSec-WebSocket-Accept
vengono aggiunti al posto delle tre chiavi di HyBi 00. Il browser fornisce aSec-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 restituireSec-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 metodonew 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 funzioneclose()
è 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.