SameSite-Cookies

Browser Support

  • Chrome: 51.
  • Edge: 16.
  • Firefox: 60.
  • Safari: 13.

Jedes Cookie enthält ein Schlüssel/Wert-Paar sowie eine Reihe von Attributen, die steuern, wann und wo das Cookie verwendet wird.

Mit der Einführung des Attributs SameSite (definiert in RFC6265bis) können Sie angeben, ob Ihr Cookie auf einen Erstanbieter- oder Same-Site-Kontext beschränkt ist. Es ist hilfreich, genau zu verstehen, was „Website“ hier bedeutet. Die Website ist die Kombination aus dem Domainsuffix und dem Teil der Domain, der unmittelbar davor steht. Die Domain www.web.dev ist beispielsweise Teil der Website web.dev.

Wichtiger Begriff: Wenn der Nutzer sich auf www.web.dev befindet und ein Bild von static.web.dev anfordert, ist das eine Same-Site-Anfrage.

In der Public Suffix List ist definiert, welche Seiten als zur selben Website gehörend gelten. Sie hängt nicht nur von Top-Level-Domains wie .com ab, sondern kann auch Dienste wie github.io umfassen. Dadurch werden your-project.github.io und my-project.github.io als separate Websites gezählt.

Wichtiger Begriff: Wenn der Nutzer auf your-project.github.io ist und ein Bild von my-project.github.io anfordert, ist das eine websiteübergreifende Anfrage.

Verwenden Sie das Attribut SameSite, um die Verwendung von Cookies zu deklarieren.

Das Attribut SameSite eines Cookies bietet drei verschiedene Möglichkeiten, dieses Verhalten zu steuern. Sie können das Attribut nicht angeben oder Strict oder Lax verwenden, um das Cookie auf Same-Site-Anfragen zu beschränken.

Wenn Sie SameSite auf Strict setzen, kann Ihr Cookie nur in einem selbst erhobenen Kontext gesendet werden, d. h., wenn die Website für das Cookie mit der Website in der Adressleiste des Browsers übereinstimmt. Wenn das Cookie promo_shown also so festgelegt ist:

Set-Cookie: promo_shown=1; SameSite=Strict

Wenn der Nutzer auf Ihrer Website ist, wird das Cookie wie erwartet mit der Anfrage gesendet. Wenn der Nutzer jedoch über einen Link von einer anderen Website auf Ihre Website gelangt, wird das Cookie bei dieser ersten Anfrage nicht gesendet. Das ist gut für Cookies, die sich auf Funktionen beziehen, die immer hinter einer ersten Navigation liegen, z. B. das Ändern eines Passworts oder das Tätigen eines Kaufs. Für ein Cookie wie promo_shown ist es jedoch zu restriktiv. Wenn der Leser dem Link zur Website folgt, möchte er, dass das Cookie gesendet wird, damit seine Einstellung angewendet werden kann.

SameSite=Lax ermöglicht es dem Browser, das Cookie bei diesen Navigationen auf oberster Ebene zu senden. Wenn beispielsweise eine andere Website auf den Inhalt deiner Website verweist, in diesem Fall durch die Verwendung deines Katzenfotos und einen Link zu deinem Artikel:

<p>Look at this amazing cat!</p>
<img src="https://blog.example/blog/img/amazing-cat.png" />
<p>Read the <a href="https://blog.example/blog/cat.html">article</a>.</p>

Mit einem Cookie, das so auf Lax gesetzt ist:

Set-Cookie: promo_shown=1; SameSite=Lax

Wenn der Browser amazing-cat.png für den Blog der anderen Person anfordert, sendet deine Website das Cookie nicht. Wenn der Leser jedoch dem Link zu cat.html auf deiner Website folgt, enthält diese Anfrage das Cookie.

Wir empfehlen, SameSite auf diese Weise zu verwenden und Cookies, die sich auf die Darstellung der Website auswirken, auf Lax und Cookies, die sich auf Nutzeraktionen beziehen, auf Strict festzulegen.

Sie können SameSite auch auf None festlegen, um anzugeben, dass das Cookie in allen Kontexten gesendet werden soll. Wenn du einen Dienst anbietest, der von anderen Websites genutzt wird, z. B. Widgets, eingebettete Inhalte, Affiliate-Programme, Werbung oder die Anmeldung auf mehreren Websites, verwende None, um deine Absicht klar zu machen.

Drei Cookies mit den Labels „None“, „Lax“ oder „Strict“, je nach Kontext
Den Kontext eines Cookies explizit als None, Lax oder Strict kennzeichnen.

Änderungen am Standardverhalten ohne SameSite

Browser Support

  • Chrome: 80.
  • Edge: 86.
  • Firefox: behind a flag.
  • Safari: not supported.

Das Attribut SameSite wird zwar weitgehend unterstützt, aber nicht häufig verwendet. In der Vergangenheit wurden Cookies, die ohne SameSite festgelegt wurden, standardmäßig in allen Kontexten gesendet. Dadurch waren Nutzer anfällig für CSRF und unbeabsichtigte Informationslecks. Um Entwickler dazu zu bewegen, ihre Absicht anzugeben und Nutzern eine sicherere Umgebung zu bieten, werden im IETF-Vorschlag Incrementally Better Cookies zwei wichtige Änderungen dargelegt:

  • Cookies ohne SameSite-Attribut werden als SameSite=Lax behandelt.
  • Für Cookies mit SameSite=None muss auch Secure angegeben werden, d. h., sie erfordern einen sicheren Kontext.

Beide Änderungen sind abwärtskompatibel mit Browsern, die die vorherige Version des Attributs SameSite korrekt implementiert haben, sowie mit Browsern, die frühere SameSite-Versionen nicht unterstützen. Sie sollen die Abhängigkeit der Entwickler vom Standardverhalten der Browser verringern, indem das Cookie-Verhalten und die beabsichtigte Verwendung explizit gemacht werden. Alle Clients, die SameSite=None nicht erkennen, sollten es ignorieren.

Standardmäßig SameSite=Lax

Wenn Sie ein Cookie senden, ohne das Attribut SameSite anzugeben, wird es vom Browser so behandelt, als wäre es auf SameSite=Lax festgelegt. Wir empfehlen dennoch, SameSite=Lax explizit festzulegen, um die Nutzerfreundlichkeit in allen Browsern zu verbessern.

SameSite=None muss sicher sein

Wenn Sie websiteübergreifende Cookies mit SameSite=None erstellen, müssen Sie sie auch auf Secure festlegen, damit sie vom Browser akzeptiert werden:

Set-Cookie: widget_session=abc123; SameSite=None; Secure

Ihr könnt dieses Verhalten ab Chrome 76 testen, indem ihr about://flags/#cookies-without-same-site-must-be-secure aktiviert, und ab Firefox 69, indem ihr network.cookie.sameSite.noneRequiresSecure in about:config festlegt.

Wir empfehlen außerdem, vorhandene Cookies so bald wie möglich auf Secure zu aktualisieren. Wenn ihr Dienste nutzt, die Inhalte von Dritten auf eurer Website bereitstellen, solltet ihr sicherstellen, dass der Dienstanbieter seine Cookies aktualisiert. Außerdem solltet ihr alle Snippets oder Abhängigkeiten auf eurer Website aktualisieren, damit das neue Verhalten verwendet wird.

Weitere Informationen zum Aktualisieren Ihrer Cookies, um diese Änderungen an SameSite=None und die Unterschiede im Browserverhalten zu berücksichtigen, finden Sie im Folgeartikel SameSite-Cookie-Rezepte.

Vielen Dank für die Beiträge und das Feedback von Lily Chen, Malte Ubl, Mike West, Rob Dodson, Tom Steiner und Vivek Sekhar.