O que há de diferente no novo protocolo WebSocket

Eiji Kitamura
Eiji Kitamura

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 e Sec-WebSocket-Accept foram adicionados no lugar das três chaves da HyBi 00. O navegador atribui um número gerado aleatoriamente a Sec-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 retornar Sec-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 de new 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ção close() 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.