Was bedeutet das Punktpräfix in der Cookie-Domain?


92

Geben Sie hier die Bildbeschreibung ein

Was ist der Unterschied zwischen local.test.comund .local.test.com? Der Screenshot stammt von Chrome.




In Kommentar von user2864740 26. September 16 um 16:44 - Link ist tot, anscheinend hat erik.io Domain an einen anderen Benutzer oder Domain-Registrar weitergegeben.
qxotk

Antworten:


58

local.test.comwird für die Domain verwendet, während .local.test.comes auch für Subdomains verwendet wird.


11
Gilt also local.test.comnicht für x.local.test.com, sondern .local.test.comsowohl für local.test.comals auch für x.local.test.com?
Ripper234

29
Ich glaube das ist falsch. Cookies werden mit allen nachgeschalteten Subdomains mit oder ohne Punkt geteilt. Sie können sich Subdomains als "Erben" von Cookies von ihren Eltern vorstellen. Wenn Sie also ein Cookie auf example.com setzen, wird es auf blog.example.com und my.blog.example.com gesetzt. Durch das Setzen eines Cookies auf blog.example.com wird es auf this.is.my.blog.example.com und auf jede dazwischen liegende Subdomain gesetzt. Aber genau wie bei der Vererbung ist das Gegenteil nicht der Fall. Das Setzen eines Cookies auf blog.example.com setzt es nicht auf example.com.
Geddski

6
Sie können das Cookie jedoch nur auf den Host beschränken, indem Sie die Domain des Cookies überhaupt nicht festlegen (oder die Zeichenfolge auf leer setzen). Das setzt seltsamerweise das Cookie nur für den Host (example.com) und nicht für eine seiner Subdomains.
Geddski

8
Um dies anhand einer anderen Antwort zu verdeutlichen, hat der Punkt früher einen Unterschied gemacht, jetzt jedoch nicht mehr. Das Cookie wird mit oder ohne führenden Punkt an eine beliebige Subdomain der angegebenen Domain gesendet. Was tatsächlich steuert, ob es an Subdomains übergeben wird, ist, ob Sie eine Domain für das Cookie festlegen oder nicht. Wenn Sie überhaupt keine Domain festlegen, wird das Cookie nur an die Domain gesendet, die es ausgegeben hat. Es wird niemals an weniger spezifische übergeordnete Domänen gesendet (z. B. "local.test.com" wird in Anfragen an "test.com" nicht berücksichtigt), und es wird nur an übereinstimmende Subdomänen gesendet, wenn Sie einen Domänenwert festlegen.
Triynko

4
@Triynko, der Punkt macht einen Unterschied, wenn Sie ein Cookie aktualisieren möchten. Ich habe es nicht geschafft, alle Regeln zu isolieren, aber ich habe gesehen, dass die Ergebnisse je nach Vorhandensein des führenden Punkts variieren oder nicht, und dies ist nicht einfach. Wie dies funktioniert, variiert je nach Browser und ist nicht nur intuitiv. Zu steuern, ob ein Cookiename einen führenden Punkt im Browser hat oder nicht, ist nicht die einfachste Programmieraufgabe, die ich jemals ausgeführt habe.
DanAllen

80

Der führende Punkt bedeutet, dass das Cookie auch für Subdomains gültig ist. Die jüngsten HTTP-Spezifikationen (RFC 6265) haben diese Regel jedoch geändert, sodass moderne Browser sich nicht um den führenden Punkt kümmern sollten. Der Punkt wird möglicherweise von einem alten Browser benötigt, der den veralteten RFC 2109 implementiert.

RFC 6265 Abschnitt 4.1.2.3

Wenn der Wert des Domain-Attributs beispielsweise "example.com" lautet, nimmt der Benutzeragent das Cookie in den Cookie-Header auf, wenn HTTP-Anforderungen an example.com, www.example.com und www.corp.example gesendet werden. com. (Beachten Sie, dass ein führendes% x2E ("."), Falls vorhanden, ignoriert wird, obwohl dieses Zeichen nicht zulässig ist. Ein nachfolgendes% x2E ("."), Falls vorhanden, veranlasst den Benutzeragenten, das Attribut zu ignorieren. )


1
Der RFC ist auf April 2011 datiert. Sowohl IE8 als auch IE9 wurden ursprünglich vor diesem Datum veröffentlicht und werden - leider - immer noch verwendet. Meine beste Vermutung (habe es nicht versucht) ist also, dass sie den führenden Punkt brauchen. Kennt jemand eine Schätzung, wie viele Browser in freier Wildbahn noch auf dem alten RFC ausgeführt werden?
BlaM

erik.io/blog/2014/03/04/definitive-guide-to-cookie-domains empfiehlt die Verwendung eines führenden Punkts für eine optimale Kompatibilität, wenn Subdomains eingeschlossen werden sollen. Diese Kompatibilitätsanforderung wird nur weiter abnehmen. (Nicht erforderlich für 6255, aber erforderlich und mit dem gleichen Endergebnis wie für 2109.)
user2864740

12

Aus dem Artikel Die endgültige Anleitung zu Cookie-Domains und warum ein www-Präfix Ihre Website sicherer macht :

Fazit

Obwohl die Definitionen etwas unterschiedlich sind, können wir sie für jede dieser Implementierungen vereinfachen als:

  • Wenn keine Domäne im Cookie gesetzt wird, das Cookie sollte paßt nur die genauen Hostnamen des Antrags. [HINWEIS: Dies unterscheidet sich von der Rückgabe eines Set-Cookies mit einer Domain ohne Punkt!] Keine Sub-Domains, keine Teilübereinstimmungen. Dies bedeutet, dass das Domänenattribut einfach nicht enthalten ist. Es ist nicht gültig, ein leeres Domänenattribut festzulegen. Leider scheint Internet Explorer dies zusammen mit allen Subdomains als Hostnamen zu behandeln .

  • Wenn Sie eine Domain im Cookie festlegen, können Sie sicher sein, dass vor ihr ein Punkt wie .erik.io steht. Das Cookie stimmt mit allen Subdomains überein.

  • Das Festlegen einer Cookie-Domäne ohne vorhergehenden Punkt wie erik.io ist in RFC 2109-Implementierungen ungültig und führt bei anderen Implementierungen zu demselben Verhalten wie bei einem vorhergehenden Punkt. Es gibt keine Möglichkeit, ein Cookie auf eine bestimmte explizit festgelegte Domäne zu beschränken, ohne dass Unterdomänen enthalten sind.

Andere lohnende Beobachtungen:
  • In allen RFCs muss eine angegebene Cookie-Domäne gemäß normaler Übereinstimmung mit dem aktuellen Hostnamen übereinstimmen. Das Setzen eines Cookies für www.erik.io in einer Antwort von erik.io ist ungültig, da ein Cookie mit der Domain www.erik.io nicht mit erik.io übereinstimmt, wobei ersteres spezifischer ist.

  • In RFC 6265 werden Domänen beim Parsen des Set-Cookie-Headers explizit in Kleinbuchstaben geschrieben.


1

Der führende Punkt in ".local.test.com" ist, wie Chrome Cookies mit einem Satz "Domain = local.test.com" (oder einem "Domain = .local.test.com", der identisch ist) anzeigt.

Set-Cookie-Definitionen ohne "Domain = Something" zeigen die Domain (= Host) ohne führenden Punkt an.

Der führende Punkt in Chrome gibt also nicht an, ob ein führender Punkt vom Server verwendet wurde oder nicht, sondern ob dieses Cookie in seiner Definition vom Server ein "Domain = etwas" hatte oder nicht. (Und wenn ja, wird das Cookie auch an Subdomains gesendet).

Zumindest zeigen dies meine Tests. Chrome sollte das Lesen erleichtern, z. B. die genaue Zeichenfolge anzeigen, die das Cookie definiert hat, und wann es empfangen wurde.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.