¿Las cookies HTTP son específicas del puerto?
Tengo dos servicios HTTP ejecutándose en una máquina. Sólo quiero saber si comparten sus cookies o si el navegador distingue entre los dos sockets del servidor.
No, las cookies no proporcionan aislamiento por puerto.
La especificación de cookies actual es RFC 6265 , que reemplaza a RFC 2109 y RFC 2965 (ambas RFC ahora están marcadas como "Históricas") y formaliza la sintaxis para los usos de cookies en el mundo real. Dice claramente:
- Introducción
...
Por razones históricas, las cookies contienen una serie de problemas de seguridad y privacidad. Por ejemplo, un servidor puede indicar que una cookie determinada está destinada a conexiones "seguras", pero el atributo Seguro no proporciona integridad en presencia de un atacante de red activo. De manera similar, las cookies de un host determinado se comparten en todos los puertos de ese host, aunque la "política del mismo origen" habitual utilizada por los navegadores web aísla el contenido recuperado a través de diferentes puertos.
Y también:
8.5. Confidencialidad débil
Las cookies no proporcionan aislamiento por puerto . Si un servicio que se ejecuta en un puerto puede leer una cookie, un servicio que se ejecuta en otro puerto del mismo servidor también puede leerla. Si un servicio en un puerto puede escribir una cookie, un servicio que se ejecuta en otro puerto del mismo servidor también puede escribir en la cookie. Por esta razón, los servidores NO DEBEN ejecutar servicios que desconfíen mutuamente en diferentes puertos del mismo host ni utilizar cookies para almacenar información confidencial de seguridad.
De acuerdo con RFC2965 3.3.1 (que los navegadores pueden seguir o no), a menos que el puerto se especifique explícitamente a través del port
parámetro del Set-Cookie
encabezado, las cookies pueden enviarse o no a cualquier puerto.
El Manual de seguridad del navegador de Google dice: de forma predeterminada, el alcance de las cookies se limita a todas las URL del nombre de host actual y no está vinculado a la información del puerto o protocolo. y algunas líneas más adelante No hay forma de limitar las cookies a un solo nombre DNS [...] de la misma manera, no hay forma de limitarlas a un puerto específico. (Además, tenga en cuenta que IE no incluye en absoluto los números de puerto en su política del mismo origen ).
Por lo tanto, no parece seguro confiar en ningún comportamiento bien definido aquí.
Esta es una pregunta muy antigua, pero pensé en agregar una solución alternativa que usé.
Tengo dos servicios ejecutándose en mi computadora portátil (uno en el puerto 3000 y el otro en el 4000). Cuando saltaba entre ( http://localhost:3000
y http://localhost:4000
), Chrome pasaba la misma cookie, cada servicio no entendía la cookie y generaba una nueva.
Descubrí que si accedía http://localhost:3000
a y http://127.0.0.1:4000
, el problema desaparecía ya que Chrome guardaba una cookie para localhost y otra para 127.0.0.1.
Nuevamente, puede que a nadie le importe en este momento, pero fue fácil y útil para mi situación.
Esta es una gran área gris en la SOP (Política del mismo origen) de cookies.
En teoría, puede especificar el número de puerto en el dominio y la cookie no se compartirá. En la práctica, esto no funciona con varios navegadores y te encontrarás con otros problemas. Por lo tanto, esto sólo es factible si sus sitios no son para el público en general y puede controlar qué navegadores utilizar.
El mejor enfoque es obtener 2 nombres de dominio para la misma IP y no depender de los números de puerto para las cookies.