SELFHTML wird 30 Jahre alt!
Die Mitgliederversammlung findet am 24.05.2025 um 10:00 statt. Alle Mitglieder und Interessierte sind herzlich eingeladen.
Davor und danach gibt es Gelegenheiten zum gemütlichen Beisammensein. → Veranstaltungs-Ankündigung.
Cookie
Ein Cookie (englisch für Keks) – die Herkunft des Namens ist unbekannt – ist eine von einer Internetseite erstellte Textvariable, die vom Browser gespeichert wird. Cookies bieten Ihnen die Möglichkeit, direkt aus einer HTML-Datei heraus Daten auf dem Rechner des Anwenders zu speichern und beim erneuten Aufruf der gleichen HTML-Datei wieder auszulesen. So kann eine Webseite dynamisch auf gespeicherte Daten reagieren.
Es ist nur möglich, diejenigen Cookies auszulesen, die man selbst gesetzt hat. Eine Virenübertragung durch Cookies ist ausgeschlossen. Es wird eine Variable mit einem zugewiesenen Wert abgespeichert, zum Beispiel Datum und Uhrzeit des letzten Besuchs der Web-Seite. Es können keine Rechnerdaten des Anwenders ausgelesen werden.
Cookies ermöglichen Komfort beim Surfen, etwa durch das Speichern persönlicher Einstellungen oder Warenkörbe, sie können aber auch missbraucht werden um beispielsweise Nutzerprofile zu erstellen.
Inhaltsverzeichnis
Technische Details
Ein Cookie besteht aus einem Namen, einem Wert und einigen Verwaltungsinformationen. Der Name muss ein Token gemäß RFC 2616 sein – vereinfacht gesagt: ASCII-Buchstaben und -Ziffern sowie ein paar Sonderzeichen wie '-', '_' oder '.').[1]. Der Wert kann aus den ASCII-Zeichen von 33 bis 126 bestehen, mit Ausnahme der Zeichen "
, ,
, ;
und \
. Wenn Sie andere Zeichen verwenden möchten, dann müssen Sie sie codieren, beispielsweise durch URL-Codierung oder base64-Darstellung.
Die Verwaltungsinformationen oder Attribute steuern, für welche Webseiten ein Cookie sichtbar ist, wie lange er gespeichert wird und ob es Beschränkungen für den Zugriff darauf gibt. Die Attribute werden beim Setzen eines Cookies festgelegt, können später aber nicht mehr gelesen werden. Attribute werden angegeben, indem man sie durch Semikolon getrennt hinter den Cookiewert schreibt.
Das wichtigste Attribut ist die Domain, für die der Cookie gilt. Standardmäßig ist das die Domain, von der die Seite geladen wurde, es kann aber auch eine übergeordnete Domain sein (also zum Beispiel selfhtml.org statt wiki.selfhtml.org). Eine Domainangabe ohne Punkt ist nur zulässig, wenn es sich dabei nicht um eine registrierte Top-Level Domain handelt. Ein Punkt zu Beginn der Domain-Angabe (z.B. ".selfhtml.org") wird ignoriert.
Eine weiteres Attribut ist die Gültigkeitszeit. Wird es nicht gesetzt, lebt ein Cookie nur so lange, wie die Seite geladen ist (ein Session-Cookie). Man kann aber auch ein maximales Alter (Max-Age) oder ein Verfallsdatum (Expires) angeben.
Set-Cookie: benutzer=Stefan M%C3%BCnz; Domain=selfhtml.org; Expires=86400 Set-Cookie: dark-mode=true; Domain=selfhtml.org; Expires=86400
Wenn der Server diese Antwortheader schickt, speichert der Browser für die Domain selfhtml.org
einen Cookie namens benutzer
und dem URL-codierten Wert Stefan Münz
sowei einen Cookie namens dark-mode
und dem Wert true
. Beide Cookies verfallen nach 86400 Sekunden (24 Stunden).
Der Set-Cookie Header wird vom Server verwendet, um Cookies im Browser zu speichern. Der Header kann mehrfach angegeben werden, der Browser speichert die Cookies getrennt nach Name und Domain.
Sie können das Gleiche auch per JavaScript erreichen:
document.cookie = "benutzer=Stefan M%C3%BCnz; Domain=selfhtml.org; Expires=86400";
document.cookie = "darf-mode=true; Domain=selfhtml.org; Expires=86400";
Bei document.cookie
handelt es sich um keine echte Variable. Was Sie ihr zuweisen, wird wie der Wert eines Set-Cookie Headers behandelt. Wenn Sie sie auslesen, bekommen Sie das, was der Browser dem Server im Anfrageheader Cookie
senden würde:
console.log(decodeURLComponent(document.cookie));
ergibt
benutzer=Stefan Münz; dark-mode=true;
Im „Siehe auch“-Abschnitt finden Sie Links zu Artikeln, die sich mit Cookies und JavaScript befassen.
Sichere Cookies
Wenn Sie bei einem Nutzer Ihrer Webseite Daten speichern wollen, die auch in den nächsten Sessions abgerufen werden können, setzen Sie einen Cookie. Dessen Inhalt wird über einen HTTP-Request abgerufen, der Daten in einfachem Text übermittelt und deshalb einem Man-in-the-Middle-Angriff ausgesetzt sein kann.
Unter sicheren Cookies (secure cookies) versteht man Cookies, die gegen solche und XSS-Angriffe gesichert sind.
Verschlüsselung mit HTTPS
Mit HTTPS werden Ihre Daten verschlüsselt übertragen. Trotzdem könnte ein Man-in-the-Middle-Angriff Daten auf dem Weg zur sicheren Webseite abfangen und zu einer unverschlüsselten HTTP-Version umleiten, wo der Cookie dann ausgelesen wird.
HttpOnly
Cookies können im Falle eines XSS-Angriffes auch durch JavaScript ausgelesen werden.[2][3][4]
Durch das Setzen eines httpOnly
-Flags können Sie verhindern, dass Cookies durch Scripte ausgelesen werden.
Set-Cookie: CookieName=Wert; path=/; HttpOnly
Die httpOnly
-Eigenschaft ist normalerweise als false
gesetzt und muss von Ihnen auf true
gesetzt werden.
durch das Setzen eines secure-Flags können Sie erreichen, dass der Cookie nur über sichere HTTPS-Verbindungen gesendet wird.
Set-Cookie: CookieName=Wert; path=/; HttpOnly; secure
Pfadangabe
Ein Cookie mit dieser Pfadangabe steht allen Requests zur Verfügung.
Set-Cookie: CookieName=Wert; path=/; HttpOnly; secure
Durch das Präzisieren der Pfadangabe können Sie einschränken, wer darauf Zugriff hat:
Set-Cookie: CookieName=Wert; path=www.example.com/; HttpOnly; secure
Mit dieser Angabe z. B. werden Subdomains ausgeschlossen.
Fazit
Sie können durch das Setzen auf sichere HTTPS-Verbindungen, das Setzen von flags und genaue Pfadangaben das Risiko von Angriffen minimieren. Eine Alternative ist das Speichern von Informationen mit Web Storage API.
- die Daten bleiben auf dem Client-Rechner, belasten also nicht die Übertragungsleistung
- die speicherbare Datenmenge ist wesentlich größer
- die Daten sind als Schlüssel-Wert-Paare strukturiert
- es gibt kein Ablaufdatum
Verwenden Sie Cookies nur dann, wenn Sie diese tatsächlich für eine serverseitige Programmierung benötigen. Die bessere Alternative liefert die Verwendung von localStorage oder sessionStorage der Web Storage API. Diese Methoden bieten mehrere Vorteile:
- die Daten bleiben auf dem Client-Rechner, belasten also nicht die Übertragungsleistung
- die speicherbare Datenmenge ist wesentlich größer
- die Daten sind als Schlüssel-Wert-Paare strukturiert
- es gibt kein Ablaufdatum (
localStorage
)
Siehe auch
Cookies können unter anderem mit Hilfe von JavaScript erzeugt und ausgewertet werden, siehe
Mittels der Eigenschaft navigator.cookieEnabled können Sie abfragen, ob der Anwender Cookies aktiviert hat.
Weblinks
- ↑ Web Standards: RFC 2616 Abschnitt 2.2
- ↑ CodingHorror: Protecting Your Cookies: HttpOnly
- ↑ Troy Hunt: C is for cookie, H is for hacker – understanding HTTP only and Secure cookies
- ↑ infosecinstitute: Securing Cookies with HttpOnly and secure Flags
- Carsten Eilers: HTTPS und Cookies sicher einsetzen
- Cookie Controller Secure Cookies explained