La especificación del protocolo WebSocket se actualizó recientemente para resolver los problemas de seguridad anteriores y es bastante estable. A continuación, se ofrece un resumen de los cambios involucrados, junto con algunas notas sobre las implementaciones actuales.
¿Qué cambió 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 en cada fotograma. HyBi 10 ahora usa un nuevo formato como el siguiente:
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
- Se agregaron
Sec-WebSocket-Key
ySec-WebSocket-Accept
en lugar de las tres claves de HyBi 00. El navegador le asigna un número generado de forma aleatoria aSec-WebSocket-Key
. Luego, el servidor lo usa con el GUID específico del protocolo WebSocket (258EAFA5-E914-47DA-95CA-C5AB0DC85B11
) y SHA1 / BASE64, etc., para mostrarSec-WebSocket-Accept
y que el navegador pueda confirmar que comprende WebSocket. Esto evita un ataque entre protocolos. - Ahora se requiere enmascaramiento de marcos en cada fotograma. Esto evita el envenenamiento de la caché del proxy. Se agregó
Sec-WebSocket-Origin
para evitar el acceso a secuencias de comandos que el proveedor de servicios no conoce. - Se agregó
Sec-WebSocket-Origin
en lugar de la clave Origin de HyBi 00 para evitar el acceso desde secuencias de comandos que el proveedor de servicios no conoce. Ten en cuenta que será solo “Origin
” en HyBi 11.
Cambios en la API de JS
subprotocol
ahora puede ser un array, lo que permite una firma de método denew WebSocket(String url, Array subprotocol)
.- Atributo
.protocol
[String] - Atributo
.binaryType
[Blob|ArrayBuffer] .extension
[cadena]- Se agregaron el código de estado y el motivo (por el que se cerró la conexión) a
CloseEvent
. También se modificó la funciónclose()
para aceptar estos dos argumentos según corresponda.
Extensiones
- Se agregó
Sec-WebSocket-Extensions
. Las extensiones propuestas son las siguientes: deflate-frame
comprime los marcos en el origen y los extrae en el destino.x-google-mux
para admitir la multiplexación, pero está en su etapa inicial
¿Hay compatibilidad entre HyBi 00 y HyBi 10 en la implementación del servidor y el navegador?
- Las implementaciones de servidor pueden admitir HyBi 00 y HyBi 10 mediante la observación del encabezado HTTP del protocolo 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 nuevas. Sin embargo, como se indicó más arriba, no recomendamos admitir HyBi 00, ya que se sabe que es vulnerable.
¿Qué navegador es compatible con HyBi 10?
- Chrome 14 es compatible con el protocolo HyBi 10, aunque los cambios de la API de JavaScript de WebSocket mencionados anteriormente todavía están en camino. Además, Firefox 7 es compatible con HyBi 10.