Vertiefung: Cookies

Was sind Cookies?

Wofür werden Cookies verwendet?

Übung: Versuch zu Cookies

Worum geht es?

In dieser praktischen Aufgabe werden wir uns damit beschäftigen, wie Cookies von Websites im Internet verwendet werden um Sitzungsinformationen zu speichern, so dass ein Webserver auf HTTP-Abfragen von verschiedenen Clients, die gerade mit ihm kommunizieren, individuelle Inhalte als Antworten zurückliefern kann.

Dazu werden Sie die Website des fiktiven Online-Lieferdienstes “foodbar” verwenden und dabei untersuchen, wie Cookies hier eingesetzt werden, um Nutzerdaten zu verwalten.

Um diese Aufgaben zu bearbeiten, benötigen Sie einen Webbrowser, in dem sich die gespeicherten Cookies anzeigen lassen. Geeignet sind beispielsweise die aktuellen Versionen von Firefox, Edge, Chrome oder Safari für PC oder Tablet.

Aufgaben

Aufgabe 1: Cookies im Webbrowser anzeigen

Öffnen Sie die Website über diese URL: https://infweiterbildung.pythonanywhere.com/version1

Image

Lassen Sie sich in Ihrem Webbrowser alle Cookies für diese Website anzeigen, die Sie beim Aufruf der Seite vom Webserver erhalten haben.

Firefox: Öffnen Sie die Webentwicklungstools, indem Sie die Taste F12 drücken (alternativ die Tastenkombination Strg + Umschalt + I) oder im Anwendungsmenü unter “Weitere Werkzeuge” den Punkt “Werkzeuge für Web-Entwickler” wählen. Es erscheint ein neues Fenster mit einer Menüleiste. Wählen Sie hier den Reiter “Web-Speicher” aus. Über das linke Menü können Sie nun unter “Cookies” die lokal gespeicherten Cookies untersuchen.

Edge & Chrome: Öffnen Sie die Webentwicklungstools, indem Sie die Taste F12 drücken (alternativ die Tastenkombination Strg + Umschalt + I) oder im Anwendungsmenü unter “Weitere Tools” den Punkt “Entwicklungstools” wählen. Es erscheint ein neues Fenster mit einer Menüleiste. Wählen Sie hier den Reiter “Anwendung” aus. Über das linke Menü können Sie nun unter “Cookies” die lokal gespeicherten Cookies untersuchen.

Safari: In Safari müssen die Webentwicklungstools zuerst aktiviert werden: Öffnen Sie dazu die Safari-Einstellungen, gehen Sie dort auf “Erweitert” und stellen Sie sicher, dass das Kästchen bei “Menü “Entwickler” in der Menüleiste anzeigen” ganz unten angekreuzt ist. Öffnen Sie nun die Webentwicklungstools, indem Sie die Tastenkombination Alt + Cmd + A (bzw. ⌥ + ⌘ + A) drücken oder in der Menüleiste unter “Entwickler” den Punkt “Seitenressourcen einblenden” wählen. Es erscheint ein neues Fenster mit einer Menüleiste. Über das linke Menü können Sie nun unter “Cookies” die lokal gespeicherten Cookies untersuchen.

Aufgabe 2: Website und Cookies untersuchen (1. Version)

Probieren Sie die Website nun aus, indem Sie mehrere Artikel in den Warenkorb packen oder sie daraus entfernen. Bei welchen Aktionen ändern sich die Werte von Cookies, und wie ändern sie sich?

Schließen Sie die Seite des Online-Shops im Webbrowser (aber nicht den Webbrowser selbst!) und öffnen Sie sie anschließend erneut. Sind die Artikel in Ihrem Warenkorb noch vorhanden? Haben die Cookie-Werte sich geändert?

Geben Sie anschließend eine Bestellung auf und tragen Sie eine (fiktive) Adresse ein. Beobachten Sie dabei weiter, wann sich Cookie-Werte ändern und welche Daten dort gespeichert werden.

Legen Sie nach Ihrer ersten Bestellung ein paar andere Artikel in den Warenkorb und gehen Sie erneut auf “Bestellen”. Was stellen Sie fest?

Überlegen Sie: Welche Daten über Ihre Sitzung werden hier wo gespeichert?

  • Welche Informationen über Ihre Sitzung werden clientseitig, also auf Ihrem Rechner gespeichert?
  • Welche Informationen über die Sitzung werden vermutlich serverseitig, also auf dem Webserver gespeichert? Müssen dort überhaupt Informationen über laufende Sitzungen gespeichert werden?

Aufgabe 3: Website und Cookies untersuchen (2. Version)

Als nächstes soll eine zweite Version der Website untersucht werden, die auf den ersten Blick genauso aussieht und funktioniert wie die erste. Hier werden Cookies aber auf eine ganz andere Weise genutzt, um Sitzungsinformationen zu speichern.

Öffnen Sie die Website über diese URL: https://infweiterbildung.pythonanywhere.com/version2

Führen Sie die selben Aktionen wie bei [Aufgabe 2] durch und beobachten Sie, welche Werte hier im Cookie gespeichert werden und wann sie sich ändern (passiert das überhaupt?).

Überlegen und diskutieren Sie:

  • Welche Bedeutung hat das Cookie hier?
  • Welche Informationen über die Sitzung werden hier vermutlich serverseitig, also auf dem Webserver gespeichert? In welcher Beziehung stehen sie zum Cookie?

Aufgabe 4: Sicherheitsaspekte

Überlegen und diskutieren Sie:

  • Wann werden die Cookies (in beiden Versionen der Website) spätestens gelöscht? Finden Sie in der Cookie-Anzeige (in den Webentwicklungstools) Hinweise darauf? Überprüfen Sie Ihre Vermutung.
  • Ist eine der beiden Versionen der Website Ihrer Meinung nach sicherer als die andere (z. B. bezüglich der Schutzziele der Informationssicherheit)?
  • Wie könnte es einem Hacker (ganz allgemein überlegt) gelingen, Ihre Cookies für diese Website auszuspähen? Wäre das sicherheitskritisch?

Bearbeiten Sie diese Aufgabe möglichst zu zweit von verschiedenen Rehnern aus. Sie kann auch alleine an einem Rechner bearbeitet werden, wenn dort zwei verschiedene Webbrowser installiert sind (z. B. Firefox und Edge), da jeder Webbrowser seine eigenen Cookies speichert. In dem Fall verwendet “Alice” den einen und “Eve” den anderen Webbrowser.

Angenommen, einem Hacker gelingt es, Ihr Cookie (für die 2. Version der Website) auszuspähen. Simulieren Sie diese Situation zu zweit an verschiedenen Rechnern, die/der eine als “Alice” (das Opfer) und die/der andere als “Eve” (die Hackerin), indem Sie die folgenden Schritte durchführen:

  • “Alice” und “Eve” sitzen an verschiedenen Rechnern und öffnen die Website (2. Version): https://infweiterbildung.pythonanywhere.com/version2
  • “Alice” packt einen Artikel in den Warenkorb und bestellt ihn an ihre Adresse (diese Adresse ist top secret – außer den “foodbar”-Betreibenden darf sie niemand wissen).
  • “Alice” öffnet die Cookie-Anzeige ihres Webbrowsers und teilt den Wert ihres Cookies “Eve” mit (z. B. kopieren und in einer privaten Chatnachricht posten, wenn Sie über BBB zusammenarbeiten). In “Wirklichkeit” späht “Eve” den Wert natürlich heimlich aus…
  • “Eve” öffnet die Cookie-Anzeige ihres Webbrowsers und ersetzt den Wert ihres Cookies durch den von “Alice” geklauten Wert.
  • “Eve” packt einen Artikel in den Warenkorb und geht auf “Bestellen”. Was sieht sie?

Überdenken Sie ggf. noch einmal Ihre Antworten zu [Aufgabe 4].

Aufgabe 6: Nutzer-Accounts und Cookies

Angenommen, Sie könnten mit einem Nutzernamen und Passwort einen Account bei “foodbar” registrieren, so dass bestimmte Informationen über Sie dauerhaft auf dem Webserver (oder in einer serverseitigen Datenbank) gespeichert werden können.

Überlegen Sie, wie die Website das Ein- und Ausloggen mittels Cookies verwalten könnte.

  • Welche Information müsste im Cookie stehen? Welche Informationen müssten dagegen serverseitig gespeichert werden?
  • Bei welcher Aktion erhalten Sie vom Server ein Cookie und bei welcher Aktion müsste es wieder gelöscht werden?
  • Was könnte ein Angreifer hier anstellen, wenn er Ihr Cookie heimlich ausspähen könnte?

Antworten und Anmerkungen

Zu Aufgabe 1: Cookies im Webbrowser anzeigen

Das folgende Bild zeigt die Cookie-Anzeige in den Webentwicklungstools des Browsers Firefox:

Image

Beim Aufruf der Website (1. Version) erhalten Sie vier Cookies names “CART”, “CITY”, “NAME” und “STREET”, die zur Domain infweiterbildung.pythonanywhere.com gehören.

Zu Aufgabe 2: Website und Cookies untersuchen (1. Version)

Die Cookies speichern hier clientseitig verschiedene Nutzereingaben, die über den Aufruf einzelner Seiten hinaus bestehen bleiben sollen:

  • die Artikel, die sich gerade im Warenkorb befinden (Cookie “CART”)
  • die Adressdaten der letzten Bestellung, damit diese bei der nächsten Bestellung nicht erneut eingegeben werden muss (Cookies “NAME”, “STREET” und “CITY”)

Diese Informationen werden dem Webserver bei jedem Seitenaufruf mitgeteilt, indem die Cookies bei jeder HTTP-Anfrage an die Domain infweiterbildung.pythonanywhere.com mitgeschickt wird.

Serverseitig müssen also keinerlei Sitzungsinformationen gespeichert werden – alle notwendigen Informationen sind in den Cookies beim Client gespeichert.

Der Wert des Cookies “CART” wird immer dann vom Server überschrieben, wenn Sie über die Schaltflächen +1 und -1 einen Artikel zum Warenkorb hinzufügen oder entfernen. Sie sehen dann in der Cookie-Anzeige Ihres Webbrowsers, dass sich der gespeicherte Cookie-Wert nach der Antwort vom Server geändert hat.

Der Wert des Cookies “CART” wird vom Server verwendet, um in der Übersichtsseite anzuzeigen, wie viele Artikel jeder Sorte sich in Ihrem Warenkorb befinden und um auf der Bestellseite den Inhalt Ihres Warenkorbs aufzulisten.

Die Werte der anderen Cookies werden immer dann überschrieben, wenn Sie Adressdaten in das Bestellformular eingeben und dieses abschicken. Die in den Cookies gespeicherten Werte werden bei einem erneuten Aufruf der Bestellseite benutzt, um die Eingabefelder des Formulars vorauszufüllen, so dass Sie Ihre Daten nicht erneut eingeben müssen.

Image

Zu Aufgabe 3: Website und Cookies untersuchen (2. Version)

Hier wird clientseitig nur ein einzelnes Cookies namens “SESSION_ID” gespeichert. Dieses Cookies enthält eine ID, anhand derer der Webserver die verschiedenen Clients, die gerade die Website nutzen, auseinanderhalten kann.

Die eigentlichen Informationen über die Client-Sitzungen müssen hier also serverseitig gespeichert werden. Der Webserver merkt sich für jede ID, welche Adressdaten zu diesem Client gehören und welche Artikel sich gerade im Warenkorb des Clients befinden.

Wann erzeugt der Webserver eine neue ID? Wenn ein Client auf die Website zugreift und noch keine ID hat (also kein Cookie “SESSION_ID” mitgeschickt wird). Der Server bekommt allerdings nicht mit, wann die Sitzung mit einem Client endet (z. B. weil der Webbrowser geschlossen wird oder die Cookies beim Client auf andere Weise gelöscht werden).

Zu Aufgabe 4: Sicherheitsaspekte

Die Cookies werden hier spätestens beim Ende der Browser-Sitzung (also wenn der Webbrowser geschlossen wird) gelöscht. Einen Hinweis darauf liefert das Feld “Läuft ab / Höchstalter” in der Cookie-Anzeige der Webentwicklungstools: Hier steht “Sitzungsende”. Alternativ kann ein Web­server auch beim Verschicken eines Cookies an den Client eine maximale Lebensdauer oder ein Ablaufdatum für das Cookie festlegen. Oft sind Webbrowser aber aus Datenschutzgründen so eingestellt, dass sie Cookies beim Schließen des Browsers generell löschen.

In der 1. Version werden vertrauliche Informationen (die Adressdaten) clientseitig gespeichert, in der 2. Version serverseitig. Je nachdem, welches System leichter gehackt werden kann, sind die Daten also ggf. unterschiedlich sicher.

Cookies könnten etwa durch Malware auf Ihrem Rechner/in Ihrem Browser oder durch Man-in-the-Middle-Angriffe während der Kommunikation mit dem Webserver ausgespäht werden.

Bei einem Cookie-Diebstahl hat der Hacker in der 1. Version direkten Zugriff auf die vertraulichen Daten (sie stehen in den Cookies), in der 2. Version hat er indirekten Zugriff, da er die Website mit Hilfe des Cookies “verkleidet als das Opfer” nutzen kann (solange dessen Sitzungsdaten noch serverseitig gespeichert sind). Wie das funktioniert, zeigt [Aufgabe 5].

Wird wie beschrieben vorgegangen, kann “Eve” die geheime Adresse von “Alice” im Bestell­formular lesen. Nachdem “Eve” den Wert des Cookies “SESSION_ID” in ihrem Webbrowser durch die ID von “Alice” ersetzt hat, sieht sie die Website genau so wie “Alice” sie sehen würde – der Webserver unterscheidet die Clients hier ja nur anhand der ID aus dem Cookie, das mit den Anfragen an ihn geschickt wird.

Zu Aufgabe 6: Nutzer-Accounts und Cookies

Der Webserver würde hier ähnlich wie bei der 2. Version funktionieren, neu sind hier im Wesent­lichen nur das An- und Abmelden der Sitzung (Login, Logout).

  • Wenn ein Client sich über ein Login-Formular anmeldet, prüft der Webserver anhand der übermittelten Informationen (Nutzername und Passwort), ob ein Nutzer-Account auf diesen Namen registriert ist und das Passwort stimmt.
  • Wenn die Authentifikation erfolgreich war, erzeugt der Webserver eine ID für die Sitzung und schickt sie zusammen mit der HTML-Seite in einem Cookie zurück. Anhand dieser ID wird der Client im weiteren Verlauf vom Webserver erkannt (genau wie in der 2. Version).
  • Wenn der Client sich über eine bestimmte Anfrage an den Webserver abmeldet (Logout), löscht der Webserver auf seiner Seite die Sitzungs-ID und schickt ein leeres “SESSION_ID”-Cookie zurück, so dass die ID auch clientseitig gelöscht wird.

Der Webserver kann den Client hier also über das Cookie einem Account zuordnen und erkennt daran auch, ob der Client eingeloggt ist.

Alternativ könnte das Cookie auch andere Informationen enthalten, anhand derer der Client vom Webserver identifiziert und authentifiziert werden kann (z. B. Nutzername und Passwort), in diesem Fall enthält das Cookie allerdings höchst vertrauliche Informationen.

Aber auch wenn das Cookie nur eine Sitzungs-ID enthält, ist ein ähnlicher Angriff wie in Aufgabe 5 möglich: Gelingt es einem Angreifer, das Cookie zu stehlen, kann er damit dem Webserver vorgaukeln, er sei als das Opfer eingeloggt und dessen Account missbrauchen (zumindest wenn die Sitzungs-ID noch gültig ist, das Opfer sich nach dem Cookie-Diebstahl noch nicht ausgeloggt hat).

Fazit

Informationen, mit denen auf vertrauliche Nutzerdaten zugegriffen werden kann (auch indirekt), sollten prinzipiell nur über sichere (verschlüsselte) Verbindungen verschickt werden – das gilt auch für Cookies.