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

26

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 indique é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?

Plie d'Evan
la source
Cette question aurait dû être fermée / migrée en arrière lorsqu'elle a été posée, mais comme elle a attiré beaucoup d'attention, je vais la verrouiller au lieu de la fermer. Voir stackoverflow.com/questions/3089199/… pour la dupe, sur le bon site.
Chris S

Réponses:

30

Citant le même RFC2109 que vous lisez:

       * Un Set-Cookie de l'hôte de requête x.foo.com pour Domain = .foo.com serait
         être accepté.

Vous subdomain.example.compouvez donc 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 dans
       parmi tous les cookies de l'agent utilisateur.

       Sélection de domaine
            Le nom d'hôte complet du serveur d'origine 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 un nom non vide
     chaîne, B a la forme .B 'et B' est une chaîne FQDN. (Alors, xycom
     correspond au domaine .y.com mais pas y.com.)

Mais maintenant example.com, le domaine ne correspondrait pas .example.comà la définition. Mais www.example.com(ou tout autre "nom non vide" dans le domaine) le ferait. Cette RFC est en théorie obsolète par la RFC2965 , qui dictait les choses sur le forçage d'un point de tête pour les domaines sur les Set-Cookie2opé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

Firefox 3 de nsCookieService.cpp

et

Cookie_monster.cc de Chrome

Pour la perspective dans ce que les sites réels font, essayer de jouer avec l' wgetaide --save-cookies, --load-cookieset --debugde voir ce qui se passe.

Vous constaterez probablement qu'en fait la plupart des sites utilisent une combinaison de Set-Cookiel'ancienne spécification RFC avec des valeurs "Host", implicitement sans point de tête (comme twitter.com ) ou définissent des valeurs de domaine (avec un point de tête) et redirigent à un serveur comme www.example.com(comme google.com ).

médina
la source
alors comment www.example.com et example.com (qui pointent généralement vers le même site) utilisent-ils les mêmes cookies? Le premier . ne peut pas être requis dans la plupart des navigateurs, sinon cette utilisation courante ne fonctionnerait pas.
JamesRyan
Le premier point n'est forcé que par le RFC le plus récent. example.com peut définir des cookies pour "example.com" et ".example.com"; ce dernier peut être lu par www.example.com. Utilisez les commandes wget indiquées pour voir ce qui se passe.
médina du
@medina, Un utilisateur peut-il définir des cookies sur x1.yz et les lire sur x2.yz ?
Pacerier
@Pacerier Uniquement si (1) vous définissez le cookie pour y.zet (2) l'agent utilisateur implémente la RFC 6265.
Michael Hampton
@MichaelHampton, les navigateurs n'implémentent-ils pas la RFC 6265?
Pacerier
2

Si le navigateur implémente la RFC 6265 , ce que tout navigateur moderne devrait faire à ce stade, alors un cookie défini pour .example.comaura le premier point ignoré (section 5.2.3), et le cookie sera ensuite envoyé au domaine nu et à tous 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.

Michael Hampton
la source
1

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 des cookies que pour lui-même. Mais tout dépend du navigateur que vous utilisez.

Tony
la source