A especificação do protocolo WebSocket foi atualizada recentemente para solucionar as preocupações de segurança anteriores e é, em grande parte, 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. HyBi 00 costumava usar
"0x00"
para a cabeça e"0xff"
para a cauda em cada frame. O HyBi 10 agora usa um novo formato, como o seguinte:
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
são adicionados no lugar das três chaves do HyBi 00. O navegador fornece o 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.- Em cada frame, o mascaramento de frame agora é obrigatório. Isso evita o envenenamento do cache no proxy.
Sec-WebSocket-Origin
é 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 evitar o acesso a scripts que o provedor de serviços não conhece. Observe que será apenas "Origin
" no HyBi 11.
Mudanças na API JS
subprotocol
agora 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
Sec-WebSocket-Extensions
foi adicionado. As extensões propostas são:- O
deflate-frame
cria frames compactados na origem e extraídos no destino. x-google-mux
para 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 a HyBi 00, porque ela é 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 é compatível com o 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 será compatível com o HyBi 10.