web-dev-qa-db-fra.com

Subdomain.example.com peut-il définir un cookie qui peut être lu par example.com?

Je ne peux tout simplement pas croire que ce soit si difficile à déterminer.

Même après avoir lu les RFC, il n'est pas clair pour moi si un serveur sur subdomain.example.com peut définir un cookie qui peut être lu par example.com.

subdomain.example.com peut définir un cookie dont l'attribut Domain est .example.com. La RFC 2965 semble indiquer explicitement qu'un tel cookie ne sera pas envoyé à example.com, mais dit également que si vous définissez Domain = example.com, un point est ajouté, comme si vous aviez dit .example.com. Dans l'ensemble, cela semble dire que si example.com retourne définit un cookie avec Domain = example.com, il ne récupère pas ce cookie! Ça ne peut pas être vrai.

Quelqu'un peut-il clarifier les règles?

26
Evan Plaice

Citant le même RFC2109 vous lisez:

 * Un ensemble de cookies de l'hôte de demande x.foo.com pour le domaine = .foo.com serait 
 Accepté. 

Donc subdomain.example.com peut définir un cookie pour .example.com. Jusqu'ici tout va bien.

 Les règles suivantes s'appliquent au choix des valeurs de cookie applicables parmi 
 Parmi tous les cookies de l'agent utilisateur. 
 
 Sélection du domaine 
 Le serveur d'origine du serveur le nom d'hôte complet doit correspondre au domaine 
 à l'attribut Domain du cookie 

Avons-nous donc une correspondance de domaine?

 * A est une chaîne FQDN et a la forme NB, où N est une chaîne de nom non vide 
, B a la forme .B 'et B' est une chaîne FQDN. (Ainsi, x.y.com 
 Correspond au domaine .y.com mais pas y.com.) 

Mais maintenant example.com ne correspondrait pas au domaine .example.com selon la définition. Mais www.example.com (ou tout autre "nom non vide" du domaine) le ferait. Ce RFC est en théorie obsolète par RFC2965 , qui dictait les choses sur le forçage d'un point de tête pour les domaines sur Set-Cookie2 opérations.

Plus important, comme l'a noté @Tony, c'est le monde réel. Pour un aperçu de ce que font réellement les agents utilisateurs, consultez

nsCookieService.cpp de Firefox

et

cookie_monster.cc de Chrome

Pour avoir une idée de ce que font les sites réels, essayez de jouer avec wget en utilisant --save-cookies, --load-cookies, et --debug pour voir ce qui se passe.

Vous constaterez probablement qu'en fait, la plupart des sites utilisent une combinaison de Set-Cookie de l'ancienne spécification RFC avec des valeurs "Host", implicitement sans point de tête (comme Twitter.com le fait) ou en définissant des valeurs de domaine (avec un point de tête) et en redirigeant vers un serveur comme www.example.com (comme google.com le fait).

30
medina

Si le navigateur implémente RFC 6265 , ce que tout navigateur moderne devrait faire à ce stade, un cookie est défini pour .example.com aura le premier point ignoré (section 5.2.3), et le cookie sera ensuite envoyé au domaine nu et à tous les sous-domaines.

Ne comptez pas sur ce comportement si vous avez un trafic important provenant d'anciens navigateurs; ce RFC ne date que de 2011.

2
Michael Hampton

Cela ne devrait pas être possible. Cependant, comme vous l'avez dit, comme ce n'est pas une norme largement documentée, cela dépend du logiciel que vous utilisez.

La plupart des navigateurs modernes adhèrent à un "modèle de sécurité Web" défini. Le modèle régit efficacement le comportement des navigateurs en matière de sécurité, sur des choses comme les cookies (en particulier la façon dont ils seront renvoyés à un site Web donné). Le modèle a également la règle selon laquelle "les navigateurs n'envoient pas de cookies aux noms de domaine qui ne les ont pas définis".

Cela étant dit, domain.com devrait être en mesure de définir des cookies pour js.domain.com. js.domain.com, cependant, ne peut définir que des cookies pour lui-même. Mais tout dépend du navigateur que vous utilisez.

1
Tony