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
ySec-WebSocket-Accept
se agregan en lugar de las tres claves de HyBi 00. El navegador le proporciona un número generado de forma aleatoria aSec-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 mostrarSec-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 denew 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ónclose()
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.