Diferencias del nuevo protocolo WebSocket

La especificación del protocolo WebSocket se actualizó recientemente para resolver problemas de seguridad anteriores y es bastante estable. A continuación, se ofrece un resumen de los cambios implicados, junto con algunas notas sobre las implementaciones actuales.

¿Qué ha cambiado desde WebSocket HyBi 00?

  • Se cambió el formato de la trama de protocolo. HyBi 00 solía usar "0x00" para la cabeza y "0xff" para la cola para cada fotograma. HyBi 10 ahora usa el siguiente formato nuevo:
      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 ...                |
     +---------------------------------------------------------------+

Se solucionaron los problemas de seguridad

  • Sec-WebSocket-Key y Sec-WebSocket-Accept se agregan en lugar de las tres claves de HyBi 00. El navegador le proporciona un número generado de forma aleatoria a Sec-WebSocket-Key. Luego, el servidor lo usa con el GUID específico del protocolo de WebSocket (258EAFA5-E914-47DA-95CA-C5AB0DC85B11) y SHA1 / BASE64, etc. para mostrar Sec-WebSocket-Accept, de modo que el navegador pueda confirmar que entiende WebSocket. Esto evita un ataque entre protocolos.
  • En cada fotograma, ahora se requiere el enmascaramiento de fotogramas. Esto evita el envenenamiento de la caché en el proxy. Se agregó Sec-WebSocket-Origin para evitar el acceso desde secuencias de comandos que el proveedor de servicios no conoce.
  • Se agrega Sec-WebSocket-Origin en lugar de la clave de origen de HyBi 00 para evitar el acceso de secuencias de comandos que el proveedor de servicios no conoce. Ten en cuenta que solo será “Origin” en HyBi 11.

Cambios en la API de JS

  • subprotocol ahora puede ser un array, lo que permite una firma de método de new WebSocket(String url, Array subprotocol).
  • Atributo .protocol [cadena]
  • Atributo .binaryType [Blob|ArrayBuffer]
  • .extension [Cadena]
  • Se agregaron el código de estado y el motivo (por qué se cerró la conexión) a CloseEvent. La función close() también se cambió para aceptar estos dos argumentos según corresponda.

Extensiones

  • Se agregó Sec-WebSocket-Extensions. Las extensiones propuestas son las siguientes:
  • deflate-frame comprime los fotogramas en la fuente y los extrae en el destino.
  • x-google-mux para admitir el multiplexado, pero está en una etapa inicial.

¿Hay compatibilidad entre HyBi 00 y HyBi 10 en la implementación del servidor y del navegador?

  • Las implementaciones de servidores pueden admitir HyBi 00 y HyBi 10 si se observa el encabezado HTTP de enlace. Sin embargo, no se recomienda admitir HyBi 00, ya que se sabe que es vulnerable.
  • La API de JavaScript de WebSocket es muy similar entre las versiones anteriores y las nuevas. Sin embargo, como se indicó anteriormente, no recomendamos admitir HyBi 00, ya que se sabe que es vulnerable.

¿Qué navegadores son compatibles con HyBi 10?

  • Chrome 14 admite el protocolo HyBi 10, aunque los cambios en la API de JavaScript de WebSocket mencionados anteriormente aún están en camino. También se planea que Firefox 7 admita HyBi 10.