websockets socket nodejs ejemplo security html5 websocket

security - nodejs - websockets javascript



¿Por qué WebSockets sin Sec-WebSocket-Key1 es inseguro? (1)

Esto es lo que pude averiguar: estos nuevos campos están ahí para evitar ataques entre protocolos. Supongamos que se está ejecutando JavaScript malicioso en un navegador web, intentando conectarse a servidores que no son HTTP ni WebSocket (por ejemplo, FTP, telnet, SSH). Con el borrador 75, el apretón de manos consistió en solo que el cliente enviara el encabezado del handshake de WebSocket y que el servidor respondiera sin nada. Después de eso, el cliente podría enviar mensajes enmarcados /x00.../xFF . Por lo tanto, el código JavaScript malicioso en el cliente podría haber sido capaz de conectarse a un servidor no WebSocket (por ejemplo, telnet), intentar iniciar sesión y ejecutar comandos allí. Después de que se haya introducido Sec-WebSocket-Key1 , el intento de conexión de WebSocket fallará a menos que el servidor devuelva la suma de comprobación MD5 de Sec-WebSocket-Key1, etc. Forzar un servidor que no sea WebSocket (por ejemplo, telnet) es casi imposible, especialmente porque el código JavaScript no tiene control sobre Sec-WebSocket-Key1, etc.

El anteproyecto viejo y reemplazado 75 de la especificación WebSocket no especifica los encabezados de solicitud HTTP Sec-WebSocket-Key1 y Sec-WebSocket-Key2. ¿Por qué el último borrador incluye estos, y qué en términos de mayor seguridad?