A especificação do protocolo WebSocket foi atualizada recentemente para resolver problemas de segurança anteriores e é bastante estável. Confira abaixo um resumo das mudanças e algumas observações sobre as implementações atuais.
O que mudou desde o WebSocket HyBi 00?
- O formato do frame do protocolo foi alterado. O HyBi 00 usava
"0x00"para a cabeça e"0xff"para a cauda em cada frame. O HyBi 10 agora usa um novo formato:
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-KeyeSec-WebSocket-Acceptsão adicionados no lugar das três chaves do HyBi 00. O navegador fornece um número gerado aleatoriamente paraSec-WebSocket-Key. Em seguida, o servidor usa o GUID específico do protocolo WebSocket (258EAFA5-E914-47DA-95CA-C5AB0DC85B11) e SHA1 / BASE64, etc. para retornarSec-WebSocket-Accept, para que o navegador possa confirmar que entende o WebSocket. Isso evita um ataque entre protocolos.- Agora, o mascaramento de frame é obrigatório em cada frame. Isso evita o envenenamento do cache no proxy. O
Sec-WebSocket-Originé adicionado para impedir o acesso de scripts que o provedor de serviços não conhece. Sec-WebSocket-Originé 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. Isso será apenas "Origin" no HyBi 11.
Mudanças na API JS
subprotocolagora pode ser uma 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 foi alterada para aceitar esses dois argumentos.
Extensões
- Este parceiro foi adicionado:
Sec-WebSocket-Extensions. As extensões propostas são: deflate-framefaz com que os frames sejam compactados na origem e extraídos no destino.x-google-muxpara oferecer suporte à multiplexação, mas está em estágio inicial.
Há compatibilidade entre o HyBi 00 e o HyBi 10 na implementação do servidor e do navegador?
- As implementações do servidor podem oferecer suporte a HyBi 00 e HyBi 10 ao analisar o cabeçalho HTTP de handshake. No entanto, não é recomendável oferecer suporte ao HyBi 00, já que ele é conhecido por ser vulnerável.
- A API JavaScript WebSocket é bastante semelhante entre as versões antigas e novas. No entanto, como observado acima, não recomendamos oferecer suporte ao HyBi 00, porque ele é conhecido por ser vulnerável.
Qual navegador oferece suporte ao HyBi 10?
- O Chrome 14 oferece suporte ao protocolo HyBi 10, mas as mudanças da API JavaScript WebSocket mencionadas acima ainda estão a caminho. O Firefox 7 também terá suporte para o HyBi 10.