secure only headers expiration cookie security http cookies

security - only - ¿Las cookies HTTP son específicas del puerto?



httponly cookie javascript (8)

En IE 8, las cookies (verificadas solo en localhost) se comparten entre puertos. En FF 10, no lo son.

He publicado esta respuesta para que los lectores tengan al menos una opción concreta para probar cada escenario.

Tengo dos servicios HTTP que se ejecutan en una máquina. Solo quiero saber si comparten sus cookies o si el navegador distingue entre los dos sockets de servidor.


Es opcional

El puerto puede especificarse para que las cookies puedan ser específicas del puerto. No es necesario, la aplicación / servidor web debe cuidar de esto.

Fuente: Artículo de Wikipedia en alemán , RFC2109 , Capítulo 4.3.1.


Esta es un área gris grande en SOP de cookies (Política de Mismo Origen).

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 se encontrará con otros problemas. Por lo tanto, esto solo es factible si sus sitios no son para el público en general y usted puede controlar qué navegadores usar.

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.


Esta es una pregunta muy antigua pero pensé que agregaría una solución alternativa que usé.

Tengo dos servicios que se ejecutan en mi computadora portátil (uno en el puerto 3000 y el otro en 4000). Cuando saltaba entre ( http://localhost:3000 y http://localhost:4000 ), Chrome pasaba en la misma cookie, cada servicio no entendía la cookie y generaba una nueva.

Descubrí que si accedía a http://localhost:3000 y http://127.0.0.1:4000 , el problema desapareció porque Chrome conservaba una cookie para localhost y una para 127.0.0.1.

Nuevamente, a nadie le importa en este punto, pero fue fácil y útil para mi situación.


Estaba experimentando un problema similar al ejecutar (y tratar de depurar) dos aplicaciones Django diferentes en la misma máquina.

Los estaba ejecutando con estos comandos:

./manage.py runserver 8000 ./manage.py runserver 8001

Cuando hice el inicio de sesión en el primero y luego en el segundo siempre me desconecté del primero y viceversa.

Agregué esto en mi / etc / hosts

127.0.0.1 app1 127.0.0.1 app2

Entonces empecé las dos aplicaciones con estos comandos:

./manage.py runserver app1:8000 ./manage.py runserver app2:8001

Problema resuelto :)


La especificación de cookie actual es RFC 6265 , que reemplaza a RFC 2109 y RFC 2965 (ambos RFC ahora están marcados como "Históricos") y formaliza la sintaxis para el uso de cookies en el mundo real. Claramente establece:

  1. Introducción

...

Por razones históricas, las cookies contienen una serie de infelicidades 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 para un host determinado se comparten en todos los puertos de ese host, a pesar de que la "política del mismo origen" 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 leer la cookie. Si una cookie es escribible por un servicio en un puerto, la cookie también puede escribirse por un servicio que se ejecuta en otro puerto del mismo servidor. Por esta razón, los servidores NO DEBEN ejecutar servicios que desconfíen mutuamente en diferentes puertos del mismo host y utilizar cookies para almacenar información sensible a la seguridad.


Una forma alternativa de solucionar el problema es hacer que el nombre de la cookie de sesión esté relacionado con el puerto. Por ejemplo:

  • mysession8080 para el servidor que se ejecuta en el puerto 8080
  • mysession8000 para el servidor que se ejecuta en el puerto 8000

Su código podría acceder a la configuración del servidor web para averiguar qué puerto utiliza su servidor y nombrar la cookie en consecuencia.

Tenga en cuenta que su aplicación recibirá ambas cookies y debe solicitar la que corresponda a su puerto.

No es necesario tener el número de puerto exacto en el nombre de la cookie, pero esto es más conveniente.

En general, el nombre de la cookie podría codificar cualquier otro parámetro específico de la instancia del servidor que utiliza, por lo que puede ser decodificado por el contexto correcto.


De acuerdo con RFC2965 3.3.1 (que puede ser seguido o no por los navegadores), a menos que el puerto se especifique explícitamente a través del parámetro del port del encabezado Set-Cookie , las cookies pueden o no enviarse a cualquier puerto.

El Manual de seguridad del navegador de Google dice: de forma predeterminada, el alcance de las cookies está limitado a todas las URL del nombre del host actual, y no está vinculado a la información de puerto o protocolo. y algunas líneas más adelante No hay forma de limitar las cookies a un solo nombre de DNS, [...] de la misma manera, no hay manera de limitarlas a un puerto específico. (Además, tenga en cuenta que IE no tiene en cuenta los números de puerto en su política del mismo origen).

Por lo tanto, no parece ser seguro confiar en ningún comportamiento bien definido aquí.