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 eines Fehlers nach der Einstellung von Drittanbieter-Cookies zu minimieren.

Je nach Kontext des Nutzers können Cookies eigene oder Drittanbieter-Cookies sein, je nachdem, auf welcher Website der Nutzer sich gerade befindet. Wenn die registrierbare Domain und das Schema des Cookies mit der aktuellen Seite der obersten Ebene übereinstimmen, d. h. dem, was in der Adressleiste des Browsers angezeigt wird, wird davon ausgegangen, dass das Cookie von derselben Website stammt wie die Seite. Dies wird im Allgemeinen als Erstanbieter-Cookie bezeichnet.

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

Wenn das von Ihnen eingestellte Cookie nicht websiteübergreifend verwendet wird, zum Beispiel zur Verwaltung von Sitzungen auf Ihrer Website und nie in einem websiteübergreifenden iFrame, wird dieses Cookie immer in einem Erstanbieterkontext verwendet.

Standardmäßig können Cookies zwischen Websites geteilt, mit JavaScript aufgerufen und über HTTP-Verbindungen gesendet werden. Dies birgt gewisse Datenschutz- und Sicherheitsrisiken. Wir arbeiten kontinuierlich daran, das Standardverhalten zu verbessern. Mit der Privacy Sandbox und anderen Vorschlägen wie ursprungsgebundene Cookies können Sie jedoch schon heute viel tun, indem Sie zusätzliche Attribute für Ihre Cookies festlegen.

Die folgende Konfiguration gilt als Best Practice, um für Sicherheit und browserübergreifende Kompatibilität für die meisten eigenen Cookies zu sorgen. So erhalten Sie eine sichere Grundlage, die Sie anpassen können, um Berechtigungen nur bei Bedarf zu öffnen. In diesem Artikel werden auch Rezeptvariationen für bestimmte Anwendungsfälle 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 prüft, ob diese Attribute den __Host-Regeln entsprechen, und das Cookie andernfalls ablehnen.

Secure schützt Cookies vor Diebstahl in unsicheren Netzwerken, da das Senden von Cookies nur über HTTPS-Verbindungen zugelassen wird. 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 erhalten können. Wird sie weggelassen, 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, aber nicht bei Anfragen an images.example.com. Wenn Sie verschiedene Apps auf verschiedenen Subdomains ausführen, verringern Sie so das Risiko, dass eine manipulierte Domain einen Zugang zu den anderen erö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 in dieser Domain gesendet. Durch die Kombination von Domain und Path=/ wird das Cookie so eng wie möglich an den Ursprung gebunden und verhält sich ähnlich wie andere clientseitige Speicher wie LocalStorage. Es ist also kein Verwirrung, dass example.com/a andere Werte an example.com/b erhält.

Das Attribut HttpOnly bietet zusätzlichen Schutz vor schädlichen Skripts von Drittanbietern auf Ihren Websites, indem der JavaScript-Zugriff eingeschränkt wird. Dadurch kann ein Cookie nur in Anfrageheadern gesendet werden und ist für JavaScript über document.cookie nicht verfügbar.

Max-Age schränkt die Lebensdauer eines Cookies ein, da Browsersitzungen ziemlich lange dauern können und Sie nicht möchten, dass veraltete Cookies immer irgendwo auftauchen. Sie eignet sich für kurzfristige Cookies wie Nutzersitzungen oder sogar kürzere Cookies wie Tokens für die Formulareinreichung. Max-Age ist in Sekunden definiert und im vorherigen Beispiel auf 7776.000 Sekunden, also 90 Tage, festgelegt. Dies ist eine angemessene Standardeinstellung, die Sie je nach Anwendungsfall ändern können.

In SameSite=Lax wird festgelegt, dass das Cookie nur bei Anfragen derselben Website gesendet wird. Dabei stimmt die Anfrage mit dem aktuellen Browser-Kontext überein: der Website der obersten Ebene, die der Nutzer gerade besucht, und wird in der Adressleiste angezeigt. SameSite=Lax ist bei modernen Browsern der Standardwert. Es empfiehlt sich jedoch, ihn aus Gründen der Kompatibilität zwischen Browsern anzugeben, da diese unterschiedliche Standardeinstellungen haben können. Wenn Sie das Cookie ausdrücklich als „Nur selbe Website“ kennzeichnen, wird es auf Ihren Erstanbieterkontext beschränkt und Sie sollten keine Änderungen an diesem Cookie vornehmen müssen, wenn Drittanbieter-Cookies nicht mehr verwendet werden.

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

Wenn Sie eine Website mit Subdomains haben und eine Sitzung für alle Subdomains einrichten 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 für alle eine Nutzersitzung 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;
Details

Secure ist ein optionales Präfix, das weniger Anforderungen als Host geltend macht: Das Cookie muss nur 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 der Website eines Drittanbieters). Sie werden aber gesendet, wenn ein Nutzer die ursprüngliche Website aufruft, z. B. wenn er einem Link von einer anderen Website folgt.

Sie können den Zugriff auf Cookies weiter einschränken und verhindern, dass sie zusammen mit Anfragen gesendet werden, die von Websites von Drittanbietern mit SameSite=Strict initiiert werden. Dies ist nützlich, wenn Sie Cookies für Funktionen haben, die immer hinter einer anfänglichen Navigation stehen, wie beispielsweise das Ändern eines Passworts oder das Tätigen eines Kaufs.

Das Rezept

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