7. Persistenz, Autorisierung, Cookies

7.5 Tracking

Tracking

Im vorherigen Teilkapitel hatten wir das Szenario betrachtet, dass der Nutzer auf einer vertrauenswürdigen Seite A eingeloggt ist, derzeit in einem anderen Browser-Tab eine weniger vertrauenswürdige Seite B besucht. Dabei bestand die Möglichkeit, dass Seite B ohne Wissen des Nutzers gewisse URLs der Seite A aufruft, und dann bei diesen Requests eventuell Cookies mitgeschickt werden. Dies barg die Gefahr, dass die Seite B auf Server A ungewollte Aktionen auslöst (ungewolltes Ausloggen haben wir gesehen; ungewollte Banktranfsers konnten wir uns zumindest vorstellen). In diesem Teilkapitel geht es nun um ein fast umgekehrtes Szenario. Der Nutzer ist oder war auf Seite A eingeloggt, vertraut dieser Seite aber nicht unbedingt. Seite A könnte zum Beispiel ein Online-Händler sein, bei dem wir eine Bestellung aufgegeben haben. Nun sind wir auf einer Seite B, die Werbefläche verkauft. Unter den Werbekunden ist zufällig Seite A. Lädt nun der Nutzer die Seite B, so wird auf einer kleinen Werbefläche ein Bild von Seite A geladen. Wenn der Browser die Cookies, die für Seite A gespeichert sind, beim Request für das Bild mitschicken, so kann Seite A erkennen, dass ein ihr bekannter Nutzer dieses Bild geladen hat. Seite A weiß also: Nutzer XY, der gestern bei uns auf Seite B das Produkt Z gekauft und an die Adresse ... in der Stadt ... hat schicken lassen, hat heute soeben Seite A besucht.

Demo Für die folgende Demo muss der Server 15-tracker/src/server-tracker-https.js auf dem Server 193.174.103.62 gestartet werden.

Hier ist ein Bild von einer Katze (nur vom HSZG-Netzwerk aus sichtbar, und nur wenn obiger Server läuft.)

Leider klappt die Demo nicht so ganz, weil server-tracker-https.js mit HTTPS läuft, Ihr Browser aber das Zertifikat nicht erkennt bzw. nicht zuordnen kann. Einfach, weil mein Server kein richtiges HTTPS-Zertifikat hat. Ein Online-Händler aber hätte sicher eins. Tun wir also so, als hätte der Server ein gültiges Zertifikat. Hierzu klicken Sie mit der rechten Maustaste auf das Bild und wählen open in new tab. Dann weist Sie der Browser darauf hin, dass es keine private Verbindung sei. Sagen Sie dem Browser, er solle die Datei dennoch laden (was Sie da genau klicken müssen, hängt vom Browser ab).

In der Konsole, wo server-tracker-https.js läuft, sehen wir nun Meldungen der folgenden Form:

0.6164615487835605 visited 07-04-csrf.html,07-04-csrf.html,index.html,index.html,07-04-csrf.html,07-04-csrf.html,07-04-csrf.html,07-04-csrf.html,07-05-tracking.html                            
0.8499715725291506 visited 07-04-csrf.html

Übungsaufgabe Fügen Sie dem Login-Server 13-login-server.zip eine Tracker-Funktion hinzu: wenn ein Nutzer eingeloggt ist (oder mit dem gleichen Browser einmal bereits eingeloggt war) und später dann cat.jpg geladen wird (auch wenn es auf einer fremden Webseite mit z.B. als Werbung eingebunden ist), soll der Server erkennen, um welchen User es sich handelt und welche Seite dieser angesurft hat:

2024-01-05 11:48:49 user 'dominik' visited page https://trueconspiracytheories.de/oberlausitz/reptiles.html
2024-01-05 11:50:13 user 'erika' visited page https://rezeptfrei.science/oxycontin.html

Sie müssen für dieses Experiment mindestens zwei Server (auf unterschiedlichen Domains) laufen lassen. Den Login-Server beispielsweise auf localhost und einen weiteren, der rezeptfrei.science repräsentieren soll, auf 127.0.0.1.

Auch müssen Sie erreichen, dass beim Laden des Bildes cat.jpg alle Cookies mitgeschickt werden. Wie ging das nochmal? Lesen Sie im vorherigen Kapitel nach.