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.