Ein Cookie ist ein Datenblock, der im Browser gespeichert wird, um den Status und andere Informationen zu speichern, die eine Website zum Ausführen ihrer Funktionen benötigt.
Ein Cookie ist eine kleine Datei, die Websites auf dem Computer der Nutzer speichern. Die darin gespeicherten Informationen werden zwischen dem Browser und der Website hin- und hergesendet.
Jedes Cookie ist ein Schlüssel/Wert-Paar mit einer Reihe von Attributen, die steuern, wann und wo das Cookie verwendet wird. Mit diesen Attributen können Sie beispielsweise Ablaufdaten festlegen oder angeben, dass das Cookie nur über HTTPS gesendet werden soll. Sie können ein Cookie in einem HTTP-Header oder über die JavaScript-Oberfläche setzen.
Cookies sind eine der Methoden, mit denen Websites einen dauerhaften Status hinzugefügt werden kann. Im Laufe der Jahre wurden die Funktionen erweitert und weiterentwickelt, aber die Plattform weist einige problematische Altlasten auf. Um dem entgegenzuwirken, ändern Browser wie Chrome, Firefox und Edge ihr Verhalten, um datenschutzfreundlichere Standardeinstellungen durchzusetzen.
Cookies in Aktion
Angenommen, Sie haben einen Blog, in dem Sie Ihren Nutzern eine Werbeanzeige für Neuigkeiten präsentieren möchten. Nutzer können das Angebot schließen. Es wird ihnen dann für eine Weile nicht mehr angezeigt. Sie können diese Einstellung in einem Cookie speichern, die Gültigkeit auf einen Monat (2.600.000 Sekunden) festlegen und das Cookie nur über HTTPS senden. Diese Überschrift würde so aussehen:
Set-Cookie: promo_shown=1; Max-Age=2600000; Secure
Wenn ein Leser eine Seite aufruft, die diese Anforderungen erfüllt – er ist über eine sichere Verbindung verbunden und das Cookie ist weniger als einen Monat alt –, sendet sein Browser diese Kopfzeile in seiner Anfrage:
Cookie: promo_shown=1
Sie können die für diese Website verfügbaren Cookies auch mit JavaScript über document.cookie
hinzufügen und lesen. Wenn Sie eine Zuweisung für document.cookie
vornehmen, wird ein Cookie mit diesem Schlüssel erstellt oder überschrieben. Du kannst beispielsweise Folgendes in der JavaScript-Konsole deines Browsers versuchen:
→ document.cookie = "promo_shown=1; Max-Age=2600000; Secure"
← "promo_shown=1; Max-Age=2600000; Secure"
Wenn Sie document.cookie
lesen, werden alle im aktuellen Kontext zugänglichen Cookies ausgegeben. Die einzelnen Cookies werden durch ein Semikolon getrennt:
→ document.cookie;
← "promo_shown=1; color_theme=peachpuff; sidebar_loc=left"
Wenn Sie dies auf einer Auswahl beliebter Websites ausprobieren, werden Sie feststellen, dass auf den meisten deutlich mehr als drei Cookies gesetzt werden. In den meisten Fällen werden diese Cookies bei jeder einzelnen Anfrage an diese Domain gesendet, was eine Reihe von Auswirkungen hat. Die Uploadbandbreite ist für Ihre Nutzer häufig stärker eingeschränkt als die Downloadbandbreite, sodass der Overhead für alle ausgehenden Anfragen die Zeit bis zum ersten Byte verzögert. Legen Sie die Anzahl und Größe der Cookies möglichst gering fest. Verwenden Sie das Max-Age
-Attribut, damit Cookies nicht länger als nötig gespeichert werden.
Was sind eigene und Drittanbieter-Cookies?
Wenn Sie zu der Website-Auswahl zurückkehren, die Sie sich vorher angesehen haben, haben Sie wahrscheinlich festgestellt, dass Cookies für eine Vielzahl von Domains vorhanden sind, nicht nur für die, die Sie gerade besucht haben. Cookies, die mit der Domain der aktuellen Website übereinstimmen, also mit der Domain, die in der Adressleiste des Browsers angezeigt wird, werden als Erstanbieter-Cookies bezeichnet. Ebenso werden Cookies von anderen Domains als der aktuellen Website als Drittanbieter-Cookies bezeichnet. Dies ist kein absolutes Label, sondern relativ zum Kontext des Nutzers. Das gleiche Cookie kann je nachdem, auf welcher Website sich der Nutzer gerade befindet, ein Erstanbieter- oder Drittanbieter-Cookie sein.
Nehmen wir an, in einem deiner Blogposts ist unter /blog/img/amazing-cat.png
ein Bild einer besonders fantastischen Katze zu sehen. Da es ein so tolles Bild ist, verwendet eine andere Person es direkt auf ihrer Website. Wenn ein Besucher deinen Blog besucht und das Cookie promo_shown
hat, wird dieses Cookie in der Anfrage für das Bild gesendet, wenn er amazing-cat.png
auf der Website der anderen Person aufruft. Das ist für niemanden besonders nützlich, da promo_shown
auf der Website der anderen Person nicht verwendet wird. Es erhöht nur den Overhead der Anfrage.
Wenn das ein unbeabsichtigter Effekt ist, warum sollten Sie das tun? Dank dieses Mechanismus können Websites den Status beibehalten, wenn sie in einem Drittanbieterkontext verwendet werden. Wenn Sie beispielsweise ein YouTube-Video auf Ihrer Website einbetten, sehen Besucher im Player die Option „Später ansehen“. Wenn sich dein Besucher bereits in YouTube angemeldet hat, wird diese Sitzung über ein Drittanbieter-Cookie im eingebetteten Player verfügbar gemacht. Das bedeutet, dass das Video über die Schaltfläche „Später ansehen“ direkt gespeichert wird, anstatt dass der Besucher aufgefordert wird, sich anzumelden oder von deiner Seite zu YouTube zurückzukehren.
Eine der kulturellen Eigenschaften des Webs ist, dass es standardmäßig offen ist. Das ist einer der Gründe, warum so viele Nutzer dort eigene Inhalte und Apps erstellen können. Dies hat jedoch auch eine Reihe von Sicherheits- und Datenschutzbedenken mit sich gebracht. CSRF-Angriffe (Cross-Site Request Forgery) basieren darauf, dass Cookies an eine Anfrage an einen bestimmten Ursprung angehängt sind, unabhängig davon, wer die Anfrage initiiert. Wenn Sie beispielsweise evil.example
aufrufen, kann dies Anfragen an your-blog.example
auslösen und Ihr Browser hängt die zugehörigen Cookies an. Wenn dein Blog bei der Validierung dieser Anfragen nicht vorsichtig ist, könnte evil.example
Aktionen wie das Löschen von Beiträgen oder das Hinzufügen eigener Inhalte auslösen.
Außerdem werden Nutzer immer mehr darauf aufmerksam, wie mithilfe von Cookies ihre Aktivitäten auf mehreren Websites erfasst werden können. Bisher gab es jedoch keine Möglichkeit, Ihre Absicht mit dem Cookie ausdrücklich anzugeben. Das promo_shown
-Cookie sollte nur in einem selbstverwalteten Kontext gesendet werden. Ein Sitzungscookie für ein Widget, das auf anderen Websites eingebettet werden soll, dient dazu, den Anmeldestatus in einem Drittanbieterkontext bereitzustellen.
Sie können Ihre Absicht mit einem Cookie explizit angeben, indem Sie das entsprechende SameSite-Attribut festlegen.
Informationen dazu, wie Sie Ihre eigenen Cookies identifizieren und geeignete Attribute festlegen, finden Sie unter Rezepte für eigene Cookies.