Compartir cookies entre subdominio y dominio

Resuelto adam0101 asked hace 11 años • 6 respuestas

Tengo dos preguntas. Entiendo que si especifico el dominio como .example.com(con el punto inicial) en la cookie, todos los subdominios pueden compartir una cookie.

¿ Se puede subdomain.example.comacceder a una cookie creada en example.com(sin el wwwsubdominio)?

¿ Se puede example.com(sin el wwwsubdominio) acceder a la cookie si se creó en subdomain.example.com?

adam0101 avatar Aug 28 '13 22:08 adam0101
Aceptado

Si configura una cookie como esta:

Set-Cookie: name=value

entonces la cookie solo se aplicará al dominio de solicitud y solo se enviará para solicitudes exactamente al mismo dominio, no a ningún otro subdominio. (Consulte ¿Qué es una cookie "solo de host"? )

Dos dominios diferentes (por ejemplo , y o example.comy ) solo pueden compartir cookies si el atributo está presente en el encabezado:subdomain.example.comsub1.example.comsub2.example.comdomain

Set-Cookie: name=value; domain=example.com

El atributo de dominio debe coincidir con la URL de solicitud para que sea válido, lo que básicamente significa que debe ser el dominio de solicitud o un dominio "principal". Entonces, esto se aplica a ambos ejemplos de la pregunta, así como al uso compartido entre dos subdominios separados.

Esta cookie luego se enviaría a example.comcualquier subdominio deexample.com , incluidos los subdominios anidados como subsub.subdomain.example.com. (Tenga en cuenta que hay otros atributos que podrían restringir el alcance de la cookie y cuándo es enviada por el navegador, como patho Secure).

Debido a la forma en que funciona la coincidencia de dominios, si desea sub1.example.comcompartir sub2.example.comcookies, también deberá compartirlas con sub3.example.com.

Ver también:

  • www vs no-www y cookies
  • setcookie.net : un sitio donde puedes probarlo (descargo de responsabilidad: desarrollado por mí, para esta pregunta)

Una nota sobre los puntos iniciales en domainlos atributos: a principios de RFC 2109domain=.example.com , solo se podían usar dominios con un punto inicial ( ) en todos los subdominios. Pero esto no se pudo compartir con el dominio de nivel superior, por lo que lo que usted solicita no era posible en la especificación anterior.

Sin embargo, la especificación más reciente RFC 6265 ignora cualquier punto inicial, lo que significa que puede utilizar la cookie tanto en subdominios como en el dominio de nivel superior.

cmbuckley avatar Apr 15 '2014 14:04 cmbuckley

Tengan en cuenta que pueden configurar una cookie desde un subdominio en un dominio.

(enviado en la respuesta para solicitar subdomain.example.com)

Set-Cookie: name=value; Domain=example.com // GOOD

Pero no puedes configurar una cookie de un dominio en un subdominio.

(enviado en la respuesta para solicitar example.com)

Set-Cookie: name=value; Domain=subdomain.example.com // Browser rejects cookie

¿Por qué?

De acuerdo con las especificaciones, RFC 6265 sección 5.3.6 Modelo de almacenamiento ,

Si el host de solicitud canonicalizado no coincide con el atributo de dominio: ignore la cookie por completo y cancele estos pasos.

y RFC 6265 sección 5.1.3 Coincidencia de dominios ,

Coincidencia de dominio

Un dominio de cadena coincide con una cadena de dominio determinada si se cumple al menos una de las siguientes condiciones:

  1. La cadena de dominio y la cadena son idénticas. (Tenga en cuenta que tanto la cadena de dominio como la cadena se habrán canonicalizado a minúsculas en este punto).

  2. Se cumplen todas las condiciones siguientes:

  *  The domain string is a suffix of the string.

  *  The last character of the string that is not included in the
     domain string is a %x2E (".") character.

  *  The string is a host name (i.e., not an IP address).

Entonces subdomain.example.comel dominio coincide example.com, pero example.comno el dominio coincidesubdomain.example.com

Compruebe esta respuesta también.

Accountant م avatar Sep 05 '2019 10:09 Accountant م

No estoy seguro de que la respuesta de cmbuckley muestre la imagen completa. Lo que leo es:

A menos que los atributos de la cookie indiquen lo contrario, la cookie se devuelve únicamente al servidor de origen (y no, por ejemplo, a ningún subdominio) y caduca al final de la sesión actual (según lo definido por el agente de usuario). Los agentes de usuario ignoran las cookies no reconocidas.

RFC 6265

También

8.6.  Weak Integrity

   Cookies do not provide integrity guarantees for sibling domains (and
   their subdomains).  For example, consider foo.example.com and
   bar.example.com.  The foo.example.com server can set a cookie with a
   Domain attribute of "example.com" (possibly overwriting an existing
   "example.com" cookie set by bar.example.com), and the user agent will
   include that cookie in HTTP requests to bar.example.com.  In the
   worst case, bar.example.com will be unable to distinguish this cookie
   from a cookie it set itself.  The foo.example.com server might be
   able to leverage this ability to mount an attack against
   bar.example.com.

Para mí, eso significa que puede proteger las cookies para que no sean leídas por el subdominio/dominio, pero no puede evitar que se escriban cookies en los otros dominios. Por lo tanto, alguien puede reescribir las cookies de su sitio controlando otro subdominio visitado por el mismo navegador. Lo cual quizá no sea una gran preocupación.

Impresionante sitio de prueba de cookies proporcionado por cmbuckley y para aquellos que se lo perdieron en su respuesta como yo; vale la pena desplazarse hacia arriba.

  • Prueba de galletas
akostadinov avatar Jun 06 '2016 11:06 akostadinov

A continuación se muestra un ejemplo que utiliza la API de cookies DOM , para que podamos ver el comportamiento por nosotros mismos.

Si ejecutamos el siguiente código JavaScript,

document.cookie = "key=value"

parece ser lo mismo que ejecutar:

document.cookie = "key=value;domain=example.com"

La clave de cookie estará disponible (únicamente) en el dominio ejemplo.com .


Ahora, si ejecuta el siguiente código JavaScript en example.com,

documento.cookie = "clave=valor;dominio=.ejemplo.com"

la clave de cookie pasa a estar disponible example.comtambién para subdomain.example.com.


Finalmente, si intentara ejecutar lo siguiente en subdomain.example.com,

document.cookie = "key=value;domain=.example.com"

¿La clave de cookies estará disponible para subdomain.example.com? Me sorprendió un poco que esto estuviera permitido; Supuse que sería una violación de seguridad que un subdominio pudiera configurar una cookie en un dominio principal.

gx0r avatar Sep 26 '2017 19:09 gx0r