Download 3. Auflage

Transcript
172
7 Sessions
Übermittlung der
Session-ID zwischen
Client und Server
Session-IDs
in einem Cookie
Session-IDs in der URL
selbst nachrüsten. Sicherheitsprobleme ergeben sich, wenn der SessionMechanismus ausgetrickst werden kann, um die Sitzung eines anderen
Anwenders zu übernehmen und Aktionen in seinem Namen auszuführen. Falls eine Skriptsprache einen Session-Mechanismus mitbringt,
sollte man diesen möglichst nutzen, denn dieser ist in der Regel ausführlich getestet und Schritt für Schritt verbessert worden – das PHPeigene Session-Management gilt hier als vorbildlich. Natürlich erlauben auch Skriptsprachen mit eingebautem Session-Management eine
eigene Behandlung von Sessions, um die individuellen Notwendigkeiten bei manchen Anwendungen befriedigen zu können.
Das Session-Management von PHP legt auf dem Webserver eine
Datei im dafür vorgesehenen Verzeichnis an und speichert dort alle
Session-Daten, wie z.B. den Inhalt eines Warenkorbes. Dies bedeutet,
dass die Session-Daten nie den Client erreichen. Der Client erhält vom
Server nur die Session-ID, die die Sitzung auf dem Server identifiziert –
und meist gleichzeitig der Name der Session-Datei ist.
Die Session-IDs können auf drei Arten zwischen Browser und Server übermittelt werden:
■ in einem Cookie
■ im Query-String
■ als Formularfeld
Beim Transport mithilfe von Cookies wird das Cookie bei jedem
Request als HTTP-Header an den Webserver mitgeschickt. Das
Cookie wird vom PHP-Interpreter bzw. von der Applikation ausgestellt – es kann entweder »persistent« oder »nicht persistent« sein.
Während letztere Cookies mit dem Schließen des Browsers verfallen, werden erstere oft für lange Zeit und ohne Wissen des Nutzers auf
der Festplatte des Clients gespeichert (z.B. zur Benutzerverfolgung bei
Werbetreibenden).
Der Transport einer Session-ID in der URL kann auf zwei Arten
erfolgen:
■ URL Rewriting – Die Session-ID ist Teil der URL, z.B.
http://SESSION12345.dings.de/ oder
http://www.php-sicherheit.de/SESS12345/index.php.
■ $_GET-Parameter – Hier wird die Session-ID an den bereits
vorhandenen Query-String als weiterer Parameter angehängt, wie
in http://www.dings.de/?PHPSESSID=SESSION12345.
In der Regel wird der URL-Transport nur eingesetzt, wenn der Client
keine Cookies erlaubt – über die »trans_sid«-Funktionalität (»Transitional Session-ID«) entscheidet PHP automatisch, welche Transportmethode benutzt werden soll.