A especificação do protocolo WebSocket foi atualizada recentemente para solucionar problemas anteriores de segurança e é amplamente estável. Veja abaixo um resumo das mudanças envolvidas e algumas observações sobre as implementações atuais.
O que foi alterado desde o WebSocket HyBi 00?
- O formato do frame do protocolo foi alterado. A HyBi 00 era usada para usar
"0x00"
para a cabeça e"0xff"
para a cauda para cada frame. O HyBi 10 agora usa um novo formato, como este:
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 ... |
+---------------------------------------------------------------+
Os problemas de segurança foram resolvidos
Sec-WebSocket-Key
eSec-WebSocket-Accept
foram adicionados no lugar das três chaves da HyBi 00. O navegador atribui um número gerado aleatoriamente aSec-WebSocket-Key
. Em seguida, o servidor o usa com o GUID (258EAFA5-E914-47DA-95CA-C5AB0DC85B11
) e SHA1 / BASE64 específicos do protocolo WebSocket, etc., para retornarSec-WebSocket-Accept
. Assim, o navegador pode confirmar que entende o WebSocket. Isso evita um ataque entre protocolos.- O mascaramento de frames agora é obrigatório em cada frame. Isso evita o envenenamento do cache no proxy.
Sec-WebSocket-Origin
foi adicionado para impedir o acesso de scripts que o provedor de serviços não conhece. Sec-WebSocket-Origin
foi adicionado no lugar da chave de origem do HyBi 00 para impedir o acesso de scripts que o provedor de serviços não conhece. Observe que ele será apenas "Origin
" no HyBi 11.
Mudanças na API JS
subprotocol
agora pode ser matriz, permitindo uma assinatura de método denew WebSocket(String url, Array subprotocol)
.- Atributo
.protocol
[String] - Atributo
.binaryType
[Blob|ArrayBuffer] .extension
[String]- O código de status e o motivo (por que a conexão foi encerrada) foram adicionados a
CloseEvent
. A funçãoclose()
também mudou para aceitar esses dois argumentos.
Extensões
- Adição de
Sec-WebSocket-Extensions
As extensões propostas são: deflate-frame
cria os frames compactados na origem e extraídos no destino.x-google-mux
para oferecer suporte à multiplexação, mas está na fase inicial.
Há compatibilidade entre o HyBi 00 e o HyBi 10 na implementação do servidor e do navegador?
- As implementações de servidor podem oferecer suporte ao HyBi 00 e ao HyBi 10, observando o cabeçalho HTTP de handshake. No entanto, não é recomendado oferecer suporte ao HyBi 00, porque é conhecido por ser vulnerável.
- A API WebSocket JavaScript é muito semelhante entre as versões antiga e nova. No entanto, como mencionado acima, não recomendamos o suporte ao HyBi 00, porque ele é vulnerável.
Qual navegador é compatível com o HyBi 10?
- O Chrome 14 oferece suporte ao protocolo HyBi 10, embora as alterações da API WebSocket JavaScript mencionadas acima ainda estejam em desenvolvimento. O Firefox 7 também será compatível com o HyBi 10.