Rezepte für eigene Kekse

Hier erfahren Sie, wie Sie eigene Cookies setzen, um für Sicherheit und browserübergreifende Kompatibilität zu sorgen und das Risiko von Fehlfunktionen nach der Einstellung von Drittanbieter-Cookies zu minimieren.

Je nach Kontext des Nutzers können Cookies von Erst- oder Drittanbietern stammen. je nachdem, auf welcher Website der Nutzer sich gerade befindet. Wenn die registrierfähige Domain und das Schema des Cookies mit der aktuellen Top-Level-Seite übereinstimmen, d. h., was in der Adressleiste des Browsers angezeigt wird, stammt das Cookie von derselben Website wie die Seite und wird im Allgemeinen als „eigenes Cookie“ bezeichnet.

Cookies von anderen Domains als der aktuellen Website werden im Allgemeinen als Drittanbieter-Cookies bezeichnet.

Wenn das von Ihnen gesetzte Cookie nicht websiteübergreifend verwendet wird, z. B. zum Verwalten von Sitzungen auf Ihrer Website und nie in einem websiteübergreifenden iFrame, wird es immer nur im Kontext eines selbst erhobenen Daten verwendet.

Standardmäßig können Cookies für mehrere Websites freigegeben, per JavaScript aufgerufen und über HTTP-Verbindungen gesendet werden. Dies birgt gewisse Datenschutz- und Sicherheitsrisiken. Wir arbeiten kontinuierlich daran, das Standardverhalten zu verbessern. Mithilfe der Privacy Sandbox und anderer Vorschläge wie ursprungsgebundener Cookies können Sie heute jedoch viel erreichen, indem Sie zusätzliche Attribute für Ihre Cookies festlegen.

Die folgende Konfiguration ist eine Best Practice, die Sicherheit und browserübergreifende Kompatibilität für die meisten eigenen Cookies gewährleistet. Sie bietet eine sichere Basis, die Sie anpassen können, um Berechtigungen nur bei Bedarf zu gewähren. In diesem Artikel werden für einige spezifische Anwendungsfälle auch Rezeptvarianten behandelt.

Das Rezept

Set-Cookie:
__Host-cookie-name=cookie-value;
Secure;
Path=/;
HttpOnly;
Max-Age=7776000;
SameSite=Lax;
Details

Host ist ein optionales Präfix, das einige Attribute obligatorisch macht und andere verbietet:

  • Secure muss vorhanden sein
  • Domain muss weggelassen werden
  • Path muss / sein

Wenn Host hinzugefügt wurde, können Sie sich darauf verlassen, dass der Browser überprüft, ob diese Attribute den __Host-Regeln entsprechen, und das Cookie andernfalls ablehnen.

Secure schützt Cookies vor dem Diebstahl in unsicheren Netzwerken, da Cookies nur über HTTPS-Verbindungen gesendet werden können. Wenn Sie Ihre Website noch nicht vollständig zu HTTPS migriert haben, sollten Sie dies priorisieren.

Das Attribut Domain gibt an, welche Hosts ein Cookie empfangen können. Ohne diesen Wert wird das Cookie auf den aktuellen Dokumenthost beschränkt, mit Ausnahme von Subdomains: Das Cookie für example.com wird bei jeder Anfrage an example.com gesendet, jedoch nicht bei Anfragen an images.example.com. Wenn Sie verschiedene Anwendungen auf verschiedenen Subdomains ausführen, verringern Sie so das Risiko, dass eine manipulierte Domain zu den anderen gelangt.

Path gibt den Pfad an, der in der angeforderten URL vorhanden sein muss, damit der Browser den Cookie-Header senden kann. Wenn Path=/ festgelegt ist, wird das Cookie an alle URL-Pfade in dieser Domain gesendet. Die Kombination ohne Domain und Path=/ sorgt dafür, dass das Cookie so eng wie möglich an den Ursprung gebunden ist. Daher verhält es sich ähnlich wie andere clientseitige Speicherungen wie LocalStorage. Es gibt keine Verwirrung, dass example.com/a unterschiedliche Werte für example.com/b erhält.

Das Attribut HttpOnly bietet zusätzlichen Schutz vor schädlichen Drittanbieterskripts auf Ihren Websites, indem der JavaScript-Zugriff eingeschränkt wird. Sie lässt zu, dass ein Cookie nur in Anfrageheadern gesendet wird, und macht sie mit document.cookie für JavaScript nicht verfügbar.

Max-Age begrenzt die Lebensdauer eines Cookies, da Browsersitzungen ziemlich lange dauern können und Sie nicht möchten, dass veraltete Cookies dauerhaft bestehen. Diese Option eignet sich für kurzfristige Cookies, z. B. für Nutzersitzungen, oder auch für kürzere Cookies wie Tokens für das Senden von Formularen. Max-Age wird in Sekunden definiert und im vorherigen Beispiel auf 7.776.000 Sekunden festgelegt, was 90 Tagen entspricht. Dies ist eine angemessene Standardeinstellung, die Sie je nach Anwendungsfall ändern können.

SameSite=Lax legt fest, dass das Cookie nur bei Anfragen auf derselben Website gesendet wird. Das heißt, die Anfrage entspricht dem aktuellen Browserkontext, d. h. der Website der obersten Ebene, die der Nutzer gerade besucht und die in der Adressleiste angezeigt wird. SameSite=Lax ist die Standardeinstellung in modernen Browsern. Aus Gründen der Kompatibilität mit Browsern, die unterschiedliche Standardeinstellungen haben können, wird empfohlen, diesen Wert anzugeben. Wenn Sie das Cookie explizit als „Nur für eine Website“ kennzeichnen, wird es auf Ihre eigenen Kontexte beschränkt und Sie müssen dieses Cookie nicht mehr ändern, wenn Drittanbieter-Cookies verschwinden.

Weitere Informationen zu verschiedenen Cookie-Attributen findest du in der Set-Cookie-Dokumentation auf MDN.

Wenn Sie eine Website mit Subdomains haben und eine Sitzung für alle eine Sitzung haben möchten, kann das Präfix Host zu restriktiv sein. news.site könnte beispielsweise Subdomains für Themen wie finance.news.site und sport.news.site haben und Sie möchten eine Nutzersitzung für alle Themen erhalten. Verwenden Sie in diesem Fall das Präfix __Secure anstelle von __Host und geben Sie Domain an.

Das Rezept

Set-Cookie:
__Secure-cookie-name=cookie-value;
Secure;
Domain=news.site;
Path=/;
HttpOnly;
Max-Age=7776000;
SameSite=Lax;
Details

Secure ist ein optionales Präfix, das weniger Anforderungen als Host geltend macht: Das Cookie muss lediglich mit dem Attribut Secure festgelegt werden.

SameSite=Lax-Cookies werden nicht bei websiteübergreifenden Unteranfragen gesendet, z. B. beim Laden eingebetteter Bilder oder iFrames auf einer Drittanbieterwebsite. Sie werden jedoch gesendet, wenn ein Nutzer die Ursprungswebsite aufruft (z. B. wenn er einem Link von einer anderen Website aus folgt).

Mit SameSite=Strict können Sie den Zugriff auf Cookies weiter einschränken und verhindern, dass sie zusammen mit Anfragen von Drittanbieter-Websites gesendet werden. Dies ist nützlich, wenn Sie Cookies für Funktionen verwenden, die sich immer hinter einer ersten Navigation befinden, wie etwa dem Ändern eines Passworts oder einem Kauf.

Das Rezept

Set-Cookie:
__Host-cookie-name=cookie-value;
Secure;
Path=/;
HttpOnly;
Max-Age=7776000;
SameSite=Strict;