1.13.1) Grundlagen zu Sessions

Daten, die ein Benutzer beispielsweise in ein Formular eingegeben hat, werden in Variablen nur bis zum auswertenden PHP-Programm weitergegeben. Oft ist es wünschenswert, auf solche Variablen auch zugreifen zu können, wenn der Benutzer weitere Seiten der Website besucht.

Gerade bei so genannten personalisierten Seiten, die auf den Benutzer „reagieren“, ist es notwendig, bestimmte Daten von Seite zu Seite mitzuführen bzw. weiterzugeben.

PHP unterstützt diese Anforderungen mithilfe von Sessions (Sitzungen) und der Session-ID.

Mit Session-IDs arbeiten

Damit Informationen zu einem Besucher innerhalb einer Website seitenübergreifend verwaltet werden können, erhält ein Besucher beim ersten Zugriff auf die Website eine zufällige, eindeutige 32-stellige Zeichenkette, die sogenannte Session-ID.

Für die Dauer eines Besuches auf der Website bzw. die Zeit, bis der Benutzer den Browser wieder schließt, werden die Daten in einer sogenannten Session-Datei als Cookie auf dem Server gespeichert.

In manchen Systemen wird die Session-ID als GET-Parameter über die URL übergeben und ist somit in der Adressleiste des Browsers sichtbar.

Die Zeit, in der sich der Besucher auf der Website aufhält, wird Session genannt. Der Vorteil einer Session liegt vor allen Dingen darin, dass während einer Session die globalen Variablen der Website übernommen und somit verwendet werden können.

Auf dem Server ist dann für jede Session-ID lokal ein Speicher eingerichtet, der beliebige Variablen für den Besucher beinhalten kann. So können wir in der Session für einen Besucher beispielsweise abspeichern, mit welchem Benutzernamen sich dieser eingeloggt hat, welche Waren in seinem Warenkorb liegen usw.

Der Benutzer hat keine Möglichkeiten, die Variablen in seiner Session zu sehen oder zu manipulieren. Er besitzt nur die Information, welche Session ID ihm vom Webserver zugewiesen wurde.

Das sogenannte Durchschleifen der Session-ID ist relativ einfach zu realisieren, da diese Funktionalität intern von PHP verwaltet wird. Dazu werden die Daten der Session temporär auf dem Webserver gespeichert.

Sicherheit von Sessions

Sessions bieten zwar keine 100%ige Sicherheit, dennoch sind sie relativ sicher. Bei jedem Seitenaufruf teilt der Browser dem Webserver mit, welche Session-ID dieser besitzt. Nun kann ein böswilliger Besucher seine Session-ID einfach manipulieren und könnte die Session-ID von einem anderen Besucher angeben. Der Dieb könnte sich so als jemand anderes in einer Community ausgeben.

Wie bekommt der Angreifer denn die Session ID heraus?

Wie eingangs erwähnt werden Session-IDs entweder über die URL mittels dem Parameter ?PHPSESSID übergeben oder als Cookie beim Besucher gespeichert. Sollten die Session-IDs per URL übertragen werden, dann kann es passieren dass der Benutzer diese URL kopiert und beispielsweise diese per E-Mail oder Facebook an Freunde und Bekannte weitersendet. Rufen die Freunde dann den Link auf, so benutzen diese die Session-ID weiter und sind mit einem anderen Account eingeloggt. Dies ist gerade problematisch, wenn man den Link auf einer öffentlichen Seite postet.

Werden stattdessen Cookies verwendet, was der Standard ist und bei allen Besuchern passiert die nicht explizit Cookies deaktiviert haben, muss der Angreifer an diesen Cookie gelangen um die Session zu stehlen. Dies geht beispielsweise über einen Trojaner auf dem Rechner oder über das Abhören der Leitung.

Session ID durch Zufall erraten

Natürlich kann der Dieb auch eine Session-ID erraten, allerdings ist dies sehr unwahrscheinlich. Es ist wahrscheinlicher, dass im Lotto mehrmals hintereinander die gleichen Zahlen gezogen werden als eine Session ID per Zufall zu erraten. Darum sollte wir uns eigentlich keine Sorgen machen.

Zusammenfassend ist zu sagen, dass Sessions schon recht sicher sind und wir uns um den Diebstahl einer Session-ID meistens keine Sorgen machen müssen. Sehr kritische Operationen, wie z.B. das Löschen des Accounts oder ähnliches, sollten aber mit einer zusätzlichen Passwortabfrage nochmals gesichert sein.

Gelingt es dem Dieb doch die Session-ID zu stehlen, so spricht man vom Session-Hijacking.