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.
Öffnen Sie die Website über diese URL: https://infweiterbildung.pythonanywhere.com/version1
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.
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?
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:
Überlegen und diskutieren Sie:
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:
Überdenken Sie ggf. noch einmal Ihre Antworten zu [Aufgabe 4].
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.
Das folgende Bild zeigt die Cookie-Anzeige in den Webentwicklungstools des Browsers Firefox:
Beim Aufruf der Website (1. Version) erhalten Sie vier Cookies names “CART”, “CITY”, “NAME” und “STREET”, die zur Domain infweiterbildung.pythonanywhere.com gehören.
Die Cookies speichern hier clientseitig verschiedene Nutzereingaben, die über den Aufruf einzelner Seiten hinaus bestehen bleiben sollen:
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.
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).
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 Webserver 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 Bestellformular 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.
Der Webserver würde hier ähnlich wie bei der 2. Version funktionieren, neu sind hier im Wesentlichen nur das An- und Abmelden der Sitzung (Login, Logout).
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).
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.