Rezepte für eigene Kekse

Hier erfahren Sie, wie Sie eigene Cookies festlegen, um für Sicherheit und plattformübergreifende Kompatibilität zu sorgen und die Wahrscheinlichkeit von Fehlern zu minimieren, wenn Drittanbieter-Cookies eingestellt werden.

Cookies können im Kontext des Nutzers als eigene oder Drittanbieter-Cookies eingestuft werden, je nachdem, auf welcher Website sich der Nutzer gerade befindet. Wenn die registrierbare Domain und das Schema des Cookies mit der aktuellen Seite der obersten Ebene übereinstimmen, also mit dem, was in der Adressleiste des Browsers angezeigt wird, wird das Cookie als Cookie der gleichen Website wie die Seite betrachtet und wird allgemein als First-Party-Cookie bezeichnet.

Cookies von anderen Domains als der aktuellen Website werden allgemein 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 in einem eigenen Kontext eingesetzt.

Standardmäßig können Cookies zwischen Websites freigegeben, über JavaScript aufgerufen und über HTTP-Verbindungen gesendet werden. Dies birgt einige Datenschutz- und Sicherheitsrisiken. Wir arbeiten kontinuierlich daran, das Standardverhalten zu verbessern. Dazu nutzen wir die Privacy Sandbox und andere Vorschläge wie ursprungsgebundene Cookies. Sie können aber schon heute viel tun, indem Sie zusätzliche Attribute für Ihre Cookies festlegen.

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

Das Rezept

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

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 auf HTTPS umgestellt haben, sollten Sie dies als Priorität betrachten.

Das Attribut Domain gibt an, welche Hosts ein Cookie empfangen können. Wenn Sie das Attribut weglassen, wird das Cookie auf den aktuellen Dokumenthost beschränkt, Subdomains ausgenommen: Das Cookie für example.com wird bei jeder Anfrage an example.com gesendet, aber nicht bei Anfragen an images.example.com. Wenn Sie verschiedene Apps auf verschiedenen Subdomains ausführen, verringert sich das Risiko, dass eine kompromittierte Domain eine Tür zu den anderen öffnet.

Path gibt den Pfad an, der in der angeforderten URL vorhanden sein muss, damit der Browser den Cookie-Header senden kann. Wenn Sie Path=/ festlegen, wird das Cookie an alle URL-Pfade auf dieser Domain gesendet. Da weder Domain noch Path=/ angegeben sind, ist das Cookie so nah wie möglich am Ursprung gebunden. Es verhält sich daher ähnlich wie andere clientseitige Speicher wie LocalStorage. Es gibt keine Verwechslungsgefahr, dass example.com/a unterschiedliche Werte als example.com/b erhält.

Das Attribut HttpOnly bietet zusätzlichen Schutz vor schädlichen Drittanbieter-Skripts auf Ihren Websites, indem der JavaScript-Zugriff eingeschränkt wird. So kann ein Cookie nur in Anfrageheadern gesendet werden und ist für JavaScript mit document.cookie 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 gut 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 777.6000 Sekunden (90 Tage) festgelegt. Das ist eine angemessene Standardeinstellung, die Sie je nach Anwendungsfall ändern können.

Mit SameSite=Lax wird das Cookie nur bei Anfragen innerhalb der Website gesendet. Das heißt, wenn die Anfrage mit dem aktuellen Browserkontext übereinstimmt, also mit der Website der obersten Ebene, die der Nutzer gerade besucht und die in der Standortleiste angezeigt wird. SameSite=Lax ist die Standardeinstellung in modernen Browsern. Aus Gründen der Kompatibilität mit Browsern, die unterschiedliche Standardeinstellungen haben können, ist es jedoch ratsam, diesen Wert anzugeben. Wenn Sie das Cookie ausdrücklich als „Nur auf derselben Website“ kennzeichnen, beschränken Sie es auf Ihre eigenen Kontexte. Sie sollten dann keine Änderungen an diesem Cookie vornehmen müssen, wenn Drittanbieter-Cookies eingestellt werden.

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 Subdomains verwenden möchten, ist das Präfix Host möglicherweise zu restriktiv. 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 verwenden. 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;

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 das Senden von Cookies zusammen mit Anfragen, die von Drittanbieterwebsites stammen, unterbinden. Das ist nützlich, wenn Sie Cookies für Funktionen haben, die immer erst nach einer ersten Navigation aufgerufen werden, z. B. zum Ändern eines Passworts oder zum Kaufen.

Das Rezept

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