Tengo dos servicios HTTP ejecutándose en una máquina. Solo quiero saber si comparten sus cookies o si el navegador distingue entre los dos sockets de servidor.¿Las cookies HTTP son específicas del puerto?
Respuesta
La especificación de cookie actual es RFC 6265, que reemplaza RFC 2109 y RFC 2965 (ambas RFC ahora están marcadas como "Históricas") y formaliza la sintaxis para el uso de cookies en el mundo real. Se establece claramente:
- Introducción
...
Por razones históricas, las galletas contienen una serie de infortunios seguridad y privacidad. Por ejemplo, un servidor puede indicar que una cookie determinada está destinada a conexiones "seguras", pero el atributo de seguridad no proporciona integridad en presencia de un atacante de red activo. Del mismo modo, las cookies para un host determinado se comparten en todos los puertos de ese host, aunque la política habitual de "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 el puerto. Si una cookie es legible por un servicio que se ejecuta en un puerto, la cookie también es legible por un servicio que se ejecuta en otro puerto del mismo servidor. Si un servicio puede escribir una cookie en un puerto, un servicio que se ejecuta en otro puerto del mismo servidor también puede escribir en la cookie. Por este motivo, los servidores NO DEBEN ejecutar servicios mutuamente desconfiados en diferentes puertos del mismo host y usar cookies para almacenar información sensible a la seguridad.
Es opcional.
Se puede especificar el puerto para que las cookies puedan ser específicas del puerto. No es necesario, el servidor/aplicación web debe cuidar esto.
Fuente: German Wikipedia article, RFC2109, Capítulo 4.3.1
Ésta es un área gris grande en la cookie de SOP (política del mismo origen).
Teóricamente, 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.
No es un gris área más. [RFC 6265] (http://tools.ietf.org/html/rfc6265), que es el estándar de cookies actual, elimina cualquier confusión al eliminar simplemente la capacidad de separar las cookies en el mismo host utilizando diferentes puertos. –
Según RFC2965 3.3.1 (que podría o no podría ser seguido por los navegadores), a menos que el puerto se especifica explícitamente a través del parámetro port
de la cabecera Set-Cookie
, galletas puede o no ser enviados a cualquier puerto.
de Google Browser Security Handbook dice: por defecto, el alcance de la galleta se limita a todas las direcciones URL en el nombre de host actual - y no unida 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 DNS [...] solo de la misma manera, no hay forma de limitarlas a un puerto específico. (Además, tenga en cuenta, que el IE no tiene en cuenta los números de puerto en su política de mismo origen en absoluto.)
Por lo tanto, no parece ser seguro que confiar en cualquier comportamiento bien definido aquí.
[RFC 6265] (http://tools.ietf.org/html/rfc6265), que reemplaza RFC 2965, elimina el parámetro 'Port' en el encabezado' Set-Cookie' (porque casi nadie lo usó en la práctica) , y hace que sea muy explícito que las cookies en el mismo host NO SON ya distinguibles por los puertos. –
IE 9 ni siquiera enviará la cookie a solicitudes posteriores si el dominio tiene un puerto – axk
¿Hay algún navegador que todavía esté considerando el puerto en el SOP de sus cookies? – Bertuz
Una forma alternativa de evitar 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 tener acceso a la configuración del servidor web para averiguar qué puerto su servidor usa y nombra la cookie en consecuencia.
Tenga en cuenta que su aplicación recibirá ambas cookies y deberá solicitar la que corresponde a su puerto.
No es necesario tener el número de puerto exacto en el nombre de la cookie, pero 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 utilice, por lo que puede decodificarse mediante el contexto correcto.
En IE 8, las cookies (verificadas solo contra el host local) se comparten entre los 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.
Esta es una pregunta muy antigua, pero pensé que agregaría una solución que utilicé.
Tengo dos servicios ejecutándose 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 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 desaparecía porque Chrome guardaba una cookie para localhost y otra para 127.0.0.1.
Nuevamente, a nadie le puede importar en este punto, pero fue fácil y útil para mi situación.
Sí, porque las cookies están asociadas a nombres de host/dominio, por lo que una cookie en 'localhost' no puede compartirse con' 127.0.0.1' y viceversa. Pero las cookies en el mismo host/dominio, independientemente del puerto, se pueden compartir. –
Esto probablemente solo funciona en Chrome, ya que la mayoría de los otros navegadores no envían cookies a "localhost" (= una cadena sin dos puntos) – Max
Por supuesto que sí. Yo (y probablemente millones de otros desarrolladores) utilizo localhost para realizar pruebas todo el tiempo. A menos que el puerto agregado marque la diferencia: http: // localhost: 8080/ –
Estaba teniendo un problema similar al ejecutar (y tratar de depurar) dos aplicaciones diferentes de Django en la misma máquina.
les estaba corriendo con estos comandos:
./manage.py runserver 8000
./manage.py runserver 8001
Cuando hice de inicio de sesión en el primero y luego en la segunda Siempre me desconecté el primero y viceversa.
he añadido esto en mis /etc/hosts
127.0.0.1 app1
127.0.0.1 app2
Entonces empecé a las dos aplicaciones con estos comandos:
./manage.py runserver app1:8000
./manage.py runserver app2:8001
problema resuelto :)
- 1. Borrado sólo las cookies específicas
- 2. NodeJS y cliente HTTP - ¿Son compatibles las cookies?
- 3. ¿Qué son las sesiones sin cookies?
- 4. Cookies de sesión solo para rutas específicas
- 5. ¿Qué son las cookies firmadas y por qué son útiles?
- 6. ¿Alternativo a cookies de HTTP?
- 7. ¿Declaras que las funciones específicas de tu módulo son estáticas?
- 8. Vaya a la publicación HTTP y use las Cookies
- 9. ¿Cómo se pasan las cookies en el protocolo HTTP?
- 10. .NET HTTP POST Method - Número de cookies
- 11. Borrar las cookies del simulador de iPhone
- 12. ¿Es posible eliminar las cookies del subdominio?
- 13. Necesito obtener todas las cookies del navegador
- 14. Ayuda de la sesión CodeIgniter, ¿las cookies no son seguras?
- 15. ¿Son la sesión y las cookies lo mismo?
- 16. ¿Qué son las cookies "firmadas" en connect/expressjs?
- 17. Administración de cookies HTTP en el iPhone
- 18. ¿SSL también encripta las cookies?
- 19. Cambiando el puerto del System.Uri
- 20. Configuración de cookies en Golang (net/http)
- 21. Cómo implementar cookies en Ruby Net :: HTTP
- 22. Todas Las cookies
- 23. Abra un puerto HTTP en Amazon EC2
- 24. Http POST bloquea el puerto en URL
- 25. ¿Cómo funcionan las cookies?
- 26. Separa las ramas específicas #ifdef
- 27. ¿Cuáles son las diferencias entre NSURLConnection y ASI-HTTP-Request?
- 28. Cambiar el puerto Oracle del puerto 8080
- 29. ¿Qué son las "solicitudes HTTP simuladas de IIS"?
- 30. Mod_gzip comprime las cookies
[suena como si más complicado que esto en la vida real.] (http://stackoverflow.com/questions/1612177/are-http-cookies-port-specific/4212964#4212964) – bzlm