web-dev-qa-db-fra.com

Cookie de définition de domaine pour le sous-domaine

J'ai cherché dans de nombreuses questions sur les cookies mais je n'ai pas trouvé de réponse à mon problème. J'ai le scénario suivant:

Un utilisateur crée une connexion sur example.com et doit obtenir un cookie mais uniquement pour le sous-domaine fuu.example. com . Je génère la partie d'en-tête HTTP suivante:

Set-Cookie: name=TestUser; Domain=fuu.example.com; Path=/; secure; HttpOnly 

Mais lorsque je fais une demande à https://fuu.example.com, le cookie ne sera pas ajouté au demande. Je me demande s'il est possible que example.com installe un cookie pour fuu.example.com. Je sais qu'il est possible que example.com définisse un cookie pour .example.com également pour tous les sous-domaines pour example.com mais ce n'est pas ce que je veux.

Comment définir un cookie pour un sous-domaine? Je ne vois pas le cookie dans une demande au sous-domaine.

42
Jarus

Non. Par ailleurs fuu.example.com est une valeur Domaine non valide (elle doit commencer par un ., c'est à dire. .fuu.example.com) (voir la mise à jour ci-dessous) le le cookie serait rejeté :

Pour éviter d'éventuelles violations de sécurité ou de confidentialité, un agent utilisateur rejette un cookie (ne stockera pas ses informations) si l'une des conditions suivantes est vraie:

  • L'hôte de demande est un nom de domaine entièrement qualifié (pas une adresse IP) et a la forme [~ # ~] hd [~ # ~], où [~ # ~ ] d [~ # ~] est la valeur de l'attribut Domaine et [~ # ~] h [~ # ~] est une chaîne qui contient un ou plusieurs points.

L'hôte de demande est example.com et l'attribut Domaine est foo.example.com. Mais l'hôte de demande example.com n'a pas la forme [~ # ~] hd [~ # ~] [~ # ~] d [~ # ~] serait foo.example.com. Ainsi, le cookie est rejeté.


Mise à jour La spécification actuelle RFC 6265 , la RFC 2109 obsolète citée ci-dessus, ignore le point principal. Mais le domaine effectif est géré de la même manière:

[…] Si la valeur de l'attribut Domain est "example.com ", l'agent utilisateur inclura le cookie dans l'en-tête Cookie lors de l'envoi de requêtes HTTP à example.com, www.example.com, et = www.corp.example.com. (Notez qu'un% x2E de tête (". "), s'il est présent, est ignoré même si ce caractère n'est pas autorisé, mais un% x2E de fin (" . "), s'il est présent, obligera l'agent utilisateur à ignorer l'attribut.)

[…] L'agent utilisateur acceptera un cookie avec un attribut de domaine "example.com "ou de" foo.example.com "de foo.example.com, mais l'agent utilisateur n'acceptera pas un cookie avec un attribut de domaine de" bar.example.com "ou de" baz.foo.example.com ".

44
Gumbo

Les 2 domaines example.com et foo.example.com ne peut partager des cookies que si le domaine est explicitement nommé dans l'en-tête Set-Cookie. Sinon, la portée du cookie est limitée à l'hôte de la demande.

Par exemple, si vous avez envoyé l'en-tête suivant à partir de foo.example.com:

Set-Cookie: name=value

Ensuite, le cookie ne sera pas envoyé pour les demandes à example.com. Cependant, si vous utilisez ce qui suit, il sera utilisable sur les deux domaines:

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

Dans la RFC 2109, un domaine sans point de tête signifiait qu'il ne pouvait pas être utilisé sur des sous-domaines, et seulement un point de tête (.example.com) permettrait de l'utiliser sur plusieurs sous-domaines.

Cependant, les navigateurs modernes respectent la nouvelle spécification RFC 6265 et ignoreront tout point de tête, ce qui signifie que vous pouvez utiliser le cookie sur les sous-domaines ainsi que le domaine de premier niveau.

En résumé , si vous définissez un cookie comme le deuxième exemple ci-dessus à partir de example.com, il serait accessible par foo.example.com, et vice versa.

Pour plus de détails: https://stackoverflow.com/a/23086139/5466401

10