Frage zu Log-in Funktion "Angemeldet bleiben"?

1 Antwort

Das funktioniert so:

Beim einloggen wird Username und Passwort mit den gespeicherten Zugangsdaten in der Datenbank abgeglichen. Stimmen sie, wird serverseitig eine Session angelegt. Stell dir das vor wie eine Tabelle mit den Spalten "Session ID", "User ID", "Timeout" und ggf. weiteren Daten, die ständig gebraucht werden (z.B. eine Kopie vom Anzeigename) oder Session-spezifisch sind. Jede aktive Session ist eine Zeile in der Tabelle. Beim Anlegen einer Session wird mithilfe einer Hashfunktion eine Session ID generiert, die dann im zum Nutzer gesendet wird. Der Browser legt daraufhin ein Cookie an, das die ID speichert. Das Cookie hat ebenfalls ein Timeout gesetzt, ab dem der Browser es als verfallen ansieht. 

Bei jedem Seitenaufruf wird jetzt das Cookie in der HTTP-Anfrage mitgesendet. Der Server sieht die Session ID, prüft seinerseits ob es nach seinen Informationen noch aktuell ist. Und wenn ja, weiß er welcher Nutzer es ist der die Seite aufgerufen hat (er kennt ja die zugehörige User ID) und erkennt ihn als eingeloggt an. Fehlt das Cookie in der Anfrage (vom Nutzer im Browser gelöscht / abgelaufen) oder ist serverseitig der Timeout abgelaufen weiß der Server nicht mehr welcher Nutzer das ist weil er es entweder tatsächlich nicht weiß oder die Session nicht mehr als gültig anerkennt und die Zeile löscht. Das ist der automatische Logout. Der manuelle Logout entfernt die Zeile direkt auf Nutzerwunsch.

Wobei gesagt werden muss dass die entscheidende Variable eher der serverseitige Timeout Wert ist, da ein Nutzer das Cookie nach Belieben manipulieren kann. Außerdem wird in der Praxis häufig immer eine Session gestartet, auch wenn sie nicht mit einem Nutzer assoziiert wird (das geschieht dann erst beim Login). Aber das sind Feinheiten der Implementierung.

Die "angemeldet bleiben" Option macht nichts anderes als den Timeout im Cookie und der Session-Variable hochsetzen. Entweder auf einen besonders langen Zeitraum (z.B. eine Woche) oder gar auf sowas wie "unendlich". 

D.h. alles hängt hier vom Cookie ab. Jeder, der an deine Cookies kommt hat deine (noch aktuelle) Session ID und kann dem Server vorgaukeln dass du es bist und ist eingeloggt. Ein Browser erlaubt dem JavaScript auf Webseiten zwar nur das auslesen der eigenen Cookies (Das JavaScript in der gmx.de-Webseite darf Cookies für gmx.de auslesen), aber wenn ein Angreifer es schafft eigenen JavaScript-Code einzuschleusen (z.B. weil eine Kommentarfunktion die Eingabe nicht überprüft) könnte er die ID auslesen und sich schicken. Das nennt sich Cross-Site-Scripting (XSS-Attacke).

Wenn du auf das Schloss neben der Adresszeile klickst, dir die Cookies der aktuellen Webseite ansiehst kannst du ein Cookie finden mit einem Namen wie PHP_SESSION_ID oder gfmsession1 oder ähnlich. Das ist die Session ID. Wenn du willst kannst du dir ja mal ein Addon wie EditThisCookie in einem zweiten, völlig anderen Browser installieren, die Session ID vom ersten Browser kopieren, unter der selben Domain und Cookie-Namen mithilfe des Addons manuell anlegen und die Seite aufrufen. Dann müsstest, du wenn alles klappt, sofort angemeldet sein ohne dass du jemals vorher die Webseite in dem Browser aufgerufen hast. Es sei denn, die Webseite trifft Maßnahmen dagegen und speichert sich in der Session-Variable auch Browser-Informationen und/oder IP-Adresse und nutzt das zusätzlich für die Prüfung. 

Erdbeerkaese22 
Fragesteller
 10.12.2017, 20:42

Ich danke dir für die ausführliche Erklärung :)

1
Pulok00  28.08.2019, 22:42

Ich hätte eine Frage, angenommen man wird von einer Website weitergeleitet und kommt dann auf eine Fake-Website die vortäuscht sie wäre z.B. Amazon. Da man bei Amazon auf angemeldet bleiben war, wird doch der Browser annehmen dass das Aamazon war und ihm die Daten zur meinem Account schicken.

1
FaronWeissAlles  29.08.2019, 20:00
@Pulok00
angenommen man wird von einer Website weitergeleitet und kommt dann auf eine Fake-Website die vortäuscht sie wäre z.B. Amazon

Diese Fake-Webseite hat aber nicht die Domain amazon.com sondern eine andere, die vielleicht nur so ähnlich klingt, sagen wir anazon.com. Für den Browser sind das völlig unterschiedliche Webseiten, auch wenn sie für den Nutzer gleich aussehen. Der Webseiteninhalt spielt dabei keine Rolle. Daher kann anazon die amazon-Cookies auch nicht einsehen bzw. bekommt sie nicht gesendet.

Eine Weiterleitung wird auch nicht von der Webseite durchgeführt, sondern vom Browser. Die Webseite bittet den Browser die genannte Seite auzurufen, der löst dann die genannte Webadresse selbst über das DNS-System auf und kennt die IP des Zielservers.

Unabhängig davon wohin der Browser weitergeleitet wird wird beim Aufbau der verschlüsselten Verbindung (noch bevor die Cookies gesendet werden, das geschieht später und verschlüsselt) die Authentizität der Webseite geprüft mithilfe digitaler Zertifikate. Also ob der Rechner tatsächlich zu Amazon gehört. Der Zielrechner muss dazu eine Aufgabe lösen die nur der Besitzer des Amazon-Zertifikats lösen kann - zumindest solange bis jemand das bisher ungelöste mathematische Problem dahinter löst (z.B. die effiziente Zerlegung von Zahlen in ihre Primfaktoren)

1