SameSite-Cookies

Unterstützte Browser

  • 51
  • 16
  • 60
  • 13

Quelle

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

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

Schlüsselbegriff: Wenn der Nutzer www.web.dev verwendet und ein Bild von static.web.dev anfordert, handelt es sich um eine Anfrage vom Typ Same-Site.

In der öffentlichen Suffixliste ist festgelegt, welche Seiten als zu derselben Website gehören. Dies hängt nicht nur von Top-Level-Domains wie .com ab, sondern kann auch Dienste wie github.io umfassen. Dadurch können your-project.github.io und my-project.github.io als separate Websites gezählt werden.

Schlüsselbegriff: Wenn der Nutzer your-project.github.io verwendet und ein Bild von my-project.github.io anfordert, ist es eine websiteübergreifende Anfrage.

Verwenden Sie das Attribut SameSite, um die Verwendung von Cookies anzugeben

Das Attribut SameSite für 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 Anfragen derselben Website zu beschränken.

Wenn Sie SameSite auf Strict setzen, kann das Cookie nur in selbst erhobenen Daten gesendet werden, d. h., wenn die Website für das Cookie mit der Website übereinstimmt, die in der Adressleiste des Browsers angezeigt wird. Wenn das promo_shown-Cookie so gesetzt ist:

Set-Cookie: promo_shown=1; SameSite=Strict

Wenn der Nutzer Ihre Website besucht, wird das Cookie wie erwartet zusammen mit der Anfrage gesendet. Folgt der Nutzer jedoch einem Link von einer anderen zu Ihrer Website, wird das Cookie nicht bei dieser ersten Anfrage gesendet. Sie eignet sich für Cookies für Funktionen, die immer hinter einer anfänglichen Navigation stehen, z. B. zum Ändern eines Passworts oder zum Durchführen eines Kaufs. Für ein Cookie wie promo_shown ist es jedoch zu restriktiv. Wenn deine Leser dem Link zur Website folgen, möchten sie, dass das Cookie gesendet wird, damit ihre Präferenz angewendet werden kann.

SameSite=Lax ermöglicht dem Browser, das Cookie mit diesen Navigationen der obersten Ebene zu senden. Wenn eine andere Website beispielsweise auf den Inhalt Ihrer Website verweist, in diesem Fall durch die Verwendung Ihres Katzenfotos und die Angabe eines Links zu Ihrem 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 auf Lax gesetzt ist, so:

Set-Cookie: promo_shown=1; SameSite=Lax

Wenn der Browser amazing-cat.png für den Blog der anderen Person anfordert, sendet Ihre 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. Setzen Sie Cookies, die sich auf die Anzeige von Websites auswirken, auf Lax und Cookies im Zusammenhang mit Nutzeraktionen auf Strict.

Sie können auch SameSite auf None setzen, um anzugeben, dass das Cookie in allen Kontexten gesendet werden soll. Wenn du einen Dienst anbietest, den andere Websites nutzen, z. B. Widgets, eingebettete Inhalte, Affiliate-Programme, Werbung oder die Anmeldung über mehrere Websites hinweg, verwende None, um deine Absicht deutlich zu machen.

Drei Cookies, die je nach Kontext mit „Keine“, „Lax“ oder „Strikt“ gekennzeichnet sind
Markieren Sie den Kontext eines Cookies explizit als None, Lax oder Strict.

Änderungen am Standardverhalten ohne SameSite

Unterstützte Browser

  • 80
  • 86
  • x

Das Attribut SameSite wird weitreichend unterstützt, hat sich aber kaum durchgesetzt. In der Vergangenheit wurden Cookies ohne SameSite standardmäßig in allen Kontexten gesendet. Das macht die Nutzer anfälliger für CSRF und unbeabsichtigtes Datenleck. Damit Entwickler ihre Absichten mitteilen und Nutzer sicherer machen können, werden im IETF-Vorschlag Inkrementelle Better Cookies zwei wichtige Änderungen erläutert:

  • Cookies ohne SameSite-Attribut werden wie SameSite=Lax behandelt.
  • Cookies mit SameSite=None müssen auch Secure angeben. Sie erfordern also einen sicheren Kontext.

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

Standardmäßig SameSite=Lax

Wenn Sie ein Cookie senden, ohne das Attribut SameSite anzugeben, behandelt der Browser dieses Cookie so, als wäre es auf SameSite=Lax gesetzt. Wir empfehlen dennoch, SameSite=Lax explizit festzulegen, um die Nutzererfahrung in allen Browsern einheitlicher zu gestalten.

SameSite=None muss sicher sein

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

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

Du kannst dieses Verhalten ab Chrome 76 testen, indem du about://flags/#cookies-without-same-site-must-be-secure aktivierst, oder in Firefox 69, indem du network.cookie.sameSite.noneRequiresSecure in about:config festlegst.

Wir empfehlen außerdem, vorhandene Cookies so schnell wie möglich auf Secure zu aktualisieren. Wenn Sie auf Dienste angewiesen sind, die Inhalte von Drittanbietern auf Ihrer Website bereitstellen, sollten Sie darauf achten, dass Ihr Dienstanbieter seine Cookies aktualisiert und alle Snippets oder Abhängigkeiten auf Ihrer Website entsprechend aktualisiert, um sicherzustellen, dass das neue Verhalten verwendet wird.

Weitere Informationen zum Aktualisieren Ihrer Cookies, damit diese Änderungen an SameSite=None erfolgreich verarbeitet werden können, und zu den Unterschieden im Browserverhalten finden Sie im nachfolgenden Artikel 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.

Cookie-Hero-Image von Pille-Riin Priske auf Unsplash