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
eSec-WebSocket-Accept
vengono aggiunti al posto dei tre tasti di HyBi 00. Il browser fornisce un numero generato in modo casuale aSec-WebSocket-Key
. Quindi, il server lo utilizza con il GUID (258EAFA5-E914-47DA-95CA-C5AB0DC85B11
) e SHA1 / BASE64 specifici del protocollo WebSocket per restituireSec-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 dinew 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 funzioneclose()
è 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.