O'Reilly logo

PHP-Sicherheit: PHP/MySQL-Webanwendungen sicher programmieren by Stefan Esser, Christopher Kunz

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

171
7 Sessions
Sessions sind die Verbindung zwischen Server und Client. Sie
speichern Sitzungsdaten und enthalten Daten, die einen Benut-
zer eindeutig identifizieren. Auf Sessions sind verschiedene
Angriffe möglich, die wir hier in diesem Kapitel aufzeigen.
Außerdem erhalten Sie Tipps, wie Sie Angriffe auf Sessions ver-
hindern bzw. erschweren können.
7.1 Grundlagen
HTTP ist ein zustandsloses Protokoll. Das heißt, ein Webserver erstellt
mithilfe von PHP die Dokumente, die ein Client angefordert hat, und
liefert diese zurück an den Browser. Danach vergisst ein Webserver
diese Seite und auch den Client. Es ist also kein eindeutiges Identifizie-
rungsmerkmal für den Client vorhanden. Aus diesem Grund wurden
Webserver um ein Session-Management erweitert.
Was ist Session-
Management?
Diese Session-Mechanismen speichern lokale Daten und identifi-
zieren den Client anhand einer eindeutigen ID. Dieser Mechanismus ist
nur für dynamische Seiten notwendig, die während eines mehrstufigen
Programmablaufs (z.B. einem Online-Einkauf) auf eine Identifikation
eines Besuchers angewiesen sind. Vor allem in einer Multiuser-Umge-
bung ist dies notwendig. Ein Einkaufen in einem Onlineshop mit
Warenkorb, eine Identifikation in einem sensiblen Bereich wie zum
Beispiel Onlinebanking wäre ohne Session-Mechanismus nicht so
komfortabel möglich, denn jeder User muss nach einer eventuellen
Identifikation oder Bestellaktion weiterhin eindeutig zuzuordnen sein.
Die eindeutige Identifikation, die der Webserver jedem Besucher
zu Beginn der Sitzung zuteilt, heißt Sitzungs- oder Session-ID. Eine Ses-
sion-ID wird in der Regel automatisch zugewiesen. Einige Skriptspra-
chen – so auch PHP – haben dafür eingebaute Session-Mechanismen,
bei anderen Sprachen muss der Entwickler die Session-Funktionalität
7 Sessions172
selbst nachrüsten. Sicherheitsprobleme ergeben sich, wenn der Session-
Mechanismus ausgetrickst werden kann, um die Sitzung eines anderen
Anwenders zu übernehmen und Aktionen in seinem Namen auszufüh-
ren. Falls eine Skriptsprache einen Session-Mechanismus mitbringt,
sollte man diesen möglichst nutzen, denn dieser ist in der Regel aus-
führlich getestet und Schritt für Schritt verbessert worden – das PHP-
eigene Session-Management gilt hier als vorbildlich. Natürlich erlau-
ben auch Skriptsprachen mit eingebautem Session-Management eine
eigene Behandlung von Sessions, um die individuellen Notwendigkei-
ten 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.
Übermittlung der
Session-ID zwischen
Client und Server
Die Session-IDs können auf drei Arten zwischen Browser und Ser-
ver übermittelt werden:
in einem Cookie
im Query-String
als Formularfeld
Session-IDs
in einem Cookie
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 ausge-
stellt – es kann entweder »persistent« oder »nicht persistent« sein.
Während letztere Cookies mit dem Schließen des Browsers verfal-
len, werden erstere oft für lange Zeit und ohne Wissen des Nutzers auf
der Festplatte des Clients gespeichert (z.B. zur Benutzerverfolgung bei
Werbetreibenden).
Session-IDs in der URL
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 (»Transi-
tional Session-ID«) entscheidet PHP automatisch, welche Transport-
methode benutzt werden soll.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required