it-swarm.com.de

Teilen Sie Cookies zwischen Subdomain und Domain

Ich habe zwei Fragen. Ich verstehe, dass, wenn ich die Domain als .mydomain.com (mit dem führenden Punkt) im Cookie spezifiziere, alle Subdomains ein Cookie teilen können.

Kann subdomain.mydomain.com auf ein in mydomain.com erstelltes Cookie zugreifen (ohne die Subdomain www)?

Kann mydomain.com (ohne die Subdomain www) auf das Cookie zugreifen, wenn es in subdomain.mydomain.com erstellt wurde?

349
adam0101

Die beiden Domänen mydomain.com und subdomain.mydomain.com können Cookies nur gemeinsam nutzen, wenn die Domäne im Header Set-Cookie explizit benannt ist. Andernfalls ist der Gültigkeitsbereich des Cookies auf den anfordernden Host beschränkt. (Dies wird als "Nur-Host-Cookie" bezeichnet. Siehe Was ist ein Nur-Host-Cookie? )

Wenn Sie beispielsweise den folgenden Header von subdomain.mydomain.com gesendet haben, wird das Cookie nicht für Anforderungen an mydomain.com gesendet:

Set-Cookie: name=value

Wenn Sie jedoch Folgendes verwenden, kann es auf beiden Domänen verwendet werden:

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

Dieses Cookie wird für eine beliebige Unterdomäne von mydomain.com gesendet, einschließlich verschachtelter Unterdomänen wie subsub.subdomain.mydomain.com.

In RFC 2109 bedeutete eine Domäne ohne führenden Punkt, dass sie nicht für Unterdomänen verwendet werden konnte, und nur ein führender Punkt (.mydomain.com) würde die Verwendung über mehrere Unterdomänen hinweg ermöglichen (aber nicht die Top-Level-Domain, was Sie also fragen, war in der älteren Spezifikation nicht möglich).

Alle modernen Browser respektieren jedoch die neuere Spezifikation RFC 6265 und ignorieren alle führenden Punkte. Dies bedeutet, dass Sie das Cookie sowohl für Subdomains als auch für Top-Level-Domains verwenden können.

Zusammenfassend kann gesagt werden, dass ein Cookie, das Sie wie im obigen zweiten Beispiel für mydomain.com festgelegt haben, über subdomain.mydomain.com aufgerufen werden kann und umgekehrt. Dies kann auch verwendet werden, um es sub1.mydomain.com und sub2.mydomain.com zu ermöglichen, Cookies freizugeben.

Siehe auch:

543
cmbuckley

Ich bin mir nicht sicher, ob @cmbuckley das ganze Bild zeigt. Was ich lese ist:

Sofern die Cookie-Attribute nichts anderes angeben, wird das Cookie nur an den Origin-Server (und beispielsweise nicht an Subdomänen) zurückgegeben und läuft am Ende der aktuellen Sitzung ab (wie vom Benutzeragenten definiert). Benutzerprogramme ignorieren nicht erkannte Cookies.

RFC 6265

Ebenfalls

8.6.  Weak Integrity

   Cookies do not provide integrity guarantees for sibling domains (and
   their subdomains).  For example, consider foo.example.com and
   bar.example.com.  The foo.example.com server can set a cookie with a
   Domain attribute of "example.com" (possibly overwriting an existing
   "example.com" cookie set by bar.example.com), and the user agent will
   include that cookie in HTTP requests to bar.example.com.  In the
   worst case, bar.example.com will be unable to distinguish this cookie
   from a cookie it set itself.  The foo.example.com server might be
   able to leverage this ability to mount an attack against
   bar.example.com.

Für mich bedeutet dies, dass Sie Cookies davor schützen können, von der Subdomain/Domain gelesen zu werden, aber nicht verhindern können, dass Cookies in die anderen Domains geschrieben werden. So kann jemand Ihre Website-Cookies neu schreiben, indem er eine andere Subdomain kontrolliert, die von demselben Browser besucht wird. Das könnte kein großes Problem sein.

Fantastische Cookies-Testseite von @cmbuckley/für diejenigen, die sie in seiner Antwort verpasst haben, wie ich; es lohnt sich nach oben zu scrollen und zu stimmen /:

27
akostadinov

In diesem Beispiel wird die DOM-Cookie-API verwendet ( https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie ), damit wir uns selbst ein Bild vom Verhalten machen können .

Wenn wir folgendes JavaScript ausführen:

document.cookie = "key = value"

Es scheint dasselbe zu sein wie das Ausführen von:

document.cookie = "key = value; domain = mydomain.com"

Das Cookie key wird (nur) in der Domain mydomain.com verfügbar.


Wenn Sie nun auf mydomain.com folgendes JavaScript ausführen:

document.cookie = "key = value; domain = .mydomain.com"

Das Cookie key wird verfügbar für mydomain.com sowie subdomain.mydomain.com.


Wenn Sie versuchen sollten, Folgendes auf subdomain.meinedomain.com auszuführen:

document.cookie = "key = value; domain = .mydomain.com"

Wird das Cookie key für subdomain.meinedomain.com verfügbar? Ich war ein bisschen überrascht, dass das erlaubt ist; Ich hatte angenommen, dass es eine Sicherheitsverletzung für eine Unterdomäne wäre, wenn ein Cookie auf eine übergeordnete Domäne gesetzt werden könnte.

16
llambda

In beiden Fällen ist dies möglich, und dies ist das Standardverhalten für IE und Edge.

Die anderen Antworten liefern wertvolle Erkenntnisse, beschreiben jedoch hauptsächlich das Verhalten in Chrome. Es ist wichtig zu beachten, dass das Verhalten im IE völlig anders ist. Das sehr hilfreiche Testskript von CMBuckley zeigt, dass in Chrome die Cookies nicht zwischen Root- und Subdomains geteilt werden, wenn keine Domain angegeben ist. Der gleiche Test in IE zeigt jedoch, dass sie gemeinsam genutzt werden. Dieser IE Fall ist näher an der Beschreibung zum Mitnehmen in CMBuckleys www-or-not-www-Link. Ich weiß, dass dies der Fall ist, da wir ein System haben, das unterschiedliche Service-Stack-Cookies sowohl auf der Root- als auch auf der Sub-Domain verwendet. Es hat alles gut funktioniert, bis jemand in IE darauf zugegriffen hat und sich die beiden Systeme gestritten haben, deren Sitzungscookie gewinnen würde, bis wir den Cache in die Luft gesprengt haben.

3
DannyW