¿Por qué los websockets no admiten encabezados personalizados?

0

Esta pregunta está relacionada con esto pregunta pregunté

Para resumir, estoy jugando con websockets en este momento y estoy tratando de entender cómo autenticar a un cliente que se conecta al servidor mediante una conexión websocket.

En una conexión normal, uso la autenticación basada en token, básicamente obtengo un token del servidor después de iniciar sesión. Cada vez que hago una solicitud al servidor, la coloco en un encabezado personalizado llamado Autenticación que mi servidor Lo lee desde allí.

Con websockets, esto no funciona porque los websockets no tienen encabezados personalizados. Me quedan dos opciones para pasar este token.

1) poner el token en la cadena de consulta, obviamente no es una gran opción. El token puede ser registrado por el servidor, etc.

2) poner el token en una cookie: esto funciona pero solo cuando el cliente y el servidor se encuentran en el mismo dominio. También hay otras restricciones, como el cliente tiene que ser un navegador y cookies de soporte, etc.

De todos modos, la otra pregunta es tratar de encontrar una solución, esta pregunta es acerca de entender por qué esto es un problema. ¿Por qué websockets no admite encabezados personalizados? Es poco probable que sea un descuido: los websockets y la autenticación basada en token son tecnologías bastante maduras. ¿Existe algún tipo de problema de seguridad al permitir encabezados personalizados durante la conexión de websocket?

    
pregunta stickman 26.11.2017 - 13:04
fuente

1 respuesta

6
  

¿Por qué websockets no admite encabezados personalizados? Es poco probable que sea un descuido ...

Estoy de acuerdo en que esto parece un descuido.

Esto realmente no me sorprende ya que, en mi opinión, la implementación de WebSockets dentro del navegador no fue bien pensada en primer lugar. El problema más evidente es que WebSockets ignora la misma política de origen o restricciones CORS , es decir, el el servidor debe verificar explícitamente el origen de la conexión ( Origin header) porque, de lo contrario, Secuestro de sitios web secuestrados sería posible.

Este diseño inseguro por defecto contrasta con el comportamiento seguro por defecto de CORS que se creó un poco antes que WebSockets. Dado este obvio problema de seguridad, dudo que las consideraciones de seguridad jugaran un papel importante al no permitir encabezados personalizados como en XHR.

Tenga en cuenta que el propio protocolo WebSockets admite encabezados personalizados, ya que comienza con un protocolo de enlace HTTP similar al de una solicitud HTTP normal. Es solo en la API del navegador a la que le falta la capacidad de usar encabezados personalizados.

    
respondido por el Steffen Ullrich 26.11.2017 - 14:24
fuente

Lea otras preguntas en las etiquetas