Frage Kann subdomain.example.com ein Cookie setzen, das von example.com gelesen werden kann?


Ich kann einfach nicht glauben, dass das so schwer zu bestimmen ist.

Selbst wenn ich die RFCs gelesen habe, ist mir nicht klar, ob ein Server auf subdomain.example.com einen Cookie setzen kann, der von example.com gelesen werden kann.

subdomain.example.com kann ein Cookie setzen, dessen Domain-Attribut .example.com ist. RFC 2965 scheint explizit zu sagen, dass ein solcher Cookie nicht an example.com gesendet wird, sagt aber auch, dass wenn Sie Domain = example.com setzen, ein Punkt vorangestellt wird, als ob Sie .example.com gesagt hätten. Zusammengenommen scheint dies zu sagen, dass wenn example.com ein Cookie mit Domain = beispiel.com zurückgibt, es dieses Cookie nicht zurückbekommt! Das kann nicht stimmen.

Kann jemand klären, was die Regeln wirklich sind?


26
2018-06-22 00:39


Ursprung


Diese Frage hätte geschlossen / migriert werden sollen, als sie gefragt wurde, aber da sie viel Aufmerksamkeit auf sich gezogen hat, werde ich sie sperren, anstatt sie zu schließen. Sehen stackoverflow.com/questions/3089199/ ... für den Betrogenen, auf der richtigen Seite. - Chris S


Antworten:


Zitat aus dem gleichen RFC2109 du liest:

       * Ein Set-Cookie vom Anfrage-Host x.foo.com für Domain = .foo.com würde
         akzeptiert sein.

So subdomain.example.com kann einen Cookie setzen für .example.com. So weit, ist es gut.

       Die folgenden Regeln gelten für die Auswahl anwendbarer Cookie-Werte von
       unter allen Cookies hat der User-Agent.

       Domänenauswahl
            Der vollständig qualifizierte Host-Name des Ursprungsservers muss mit der Domäne übereinstimmen
            das Domain-Attribut des Cookies

Haben wir eine Domain-Übereinstimmung?

   * A ist eine FQDN-Zeichenfolge und hat die Form NB, wobei N ein nicht leerer Name ist
     Zeichenfolge, B hat die Form .B 'und B' ist eine FQDN-Zeichenfolge. (Also, x.y.com
     Domain-Übereinstimmungen .y.com aber nicht y.com.)

Aber jetzt example.com würde nicht mit der Domain übereinstimmen .example.com nach der Definition. Aber www.example.com (oder irgendein anderer "nicht leerer Name" in der Domäne) würde. Dieser RFC ist in der Theorie veraltet von RFC2965, die Dinge diktierte, um einen führenden Punkt für Domains zu erzwingen Set-Cookie2 Operationen.

Wichtiger, wie von @Tony bemerkt, ist die reale Welt. Einen Einblick in die tatsächlichen Benutzeragenten erhalten Sie unter

Firefox 3's nsCookieService.cpp

und

Chrome's cookie_monster.cc

Um zu erfahren, was tatsächliche Sites tun, versuchen Sie mit zu spielen wget verwenden --save-cookies, --load-cookies, und --debug um zu sehen, was vor sich geht.

Sie werden wahrscheinlich feststellen, dass tatsächlich die meisten Websites eine Kombination aus verwenden Set-Cookie von der älteren RFC-Spezifikation mit "Host" -Werten, implizit ohne einen führenden Punkt (wie twitter.com tut) oder Domain-Werte (mit einem führenden Punkt) und Umleitung auf einen Server wie www.example.com (wie google.de tut).


30
2018-06-22 04:44



Wie verwenden also www.example.com und example.com (die normalerweise auf dieselbe Website verweisen) die gleichen Cookies? Die Führung . kann in den meisten Browsern nicht benötigt werden, sonst würde diese allgemeine Verwendung nicht funktionieren. - JamesRyan
Führender Punkt wird nur vom neueren RFC erzwungen. example.com kann Cookies für "example.com" und ".example.com" setzen; Letzteres kann von www.example.com gelesen werden. Verwenden Sie die angezeigten wget-Befehle, um zu sehen, was passiert. - medina
@medina, Kann ein Benutzer Cookies bei setzen x1.y.z und lies es bei x2.y.z? - Pacerier
@Pacerier Nur wenn (1) du den Cookie für gesetzt hast y.z und (2) der Benutzeragent implementiert RFC 6265. - Michael Hampton♦
@MichaelHampton, implementieren keine Browser RFC 6265? - Pacerier


Wenn der Browser implementiert RFC 6265, die jeder moderne Browser zu diesem Zeitpunkt tun sollte, dann ein Cookie gesetzt für .example.com wird der führende Punkt ignoriert (Abschnitt 5.2.3), und der Cookie wird dann an die freie Domain und an alle Subdomains gesendet.

Verlassen Sie sich nicht auf dieses Verhalten, wenn Sie von älteren Browsern erheblichen Datenverkehr haben. Dieser RFC stammt nur aus dem Jahr 2011.


2
2018-04-09 21:27





Es sollte nicht möglich sein. Wie Sie bereits gesagt haben, ist dies jedoch kein weit verbreiteter Standard, sondern hängt davon ab, welche Software Sie verwenden.

Die meisten modernen Browser halten sich an ein definiertes "Web-Sicherheitsmodell". Das Modell regelt effektiv das Verhalten von Browsern in Bezug auf Sicherheit, auf Dinge wie Cookies (insbesondere wie sie auf eine bestimmte Website zurückgeschickt werden). Das Modell hat auch die Regel, dass "Browser keine Cookies an Domain-Namen senden, die sie nicht gesetzt haben."

These, domain.com sollte in der Lage sein, Cookies für js.domain.com zu setzen. js.domain.com kann jedoch nur Cookies für sich selbst setzen. Aber das hängt alles davon ab, welchen Browser Sie verwenden.


1
2018-06-22 01:15