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

1777.4 Schwache Algorithmen zur Session-ID-Generierung
7.4 Schwache Algorithmen zur
Session-ID-Generierung
Session-IDs sollten für jeden Benutzer eindeutig sein. Dazu ist ein
Algorithmus notwendig, der garantiert für jede neue Session eine ein-
deutige ID generiert. Ob ein Generierungsalgorithmus dieses Krite-
rium erfüllt, kann man durch die Erstellung mehrerer neuer Session-
IDs prüfen. Für diese Prüfung schreiben Sie sich einfach ein kurzes
PHP-Skript wie folgendes:
Ausgabe von 20 Session-
IDs in PHP
<?php
session_start();
for ($i=0;$i<20;$i++) {
echo session_id().'<br/>';
session_regenerate_id();
}
?>
session_regenerate_id()Hier wird die Funktion session_regenerate_id() verwendet, da die
Funktion
session_destroy() zwar die Session-Daten zerstört, aber
nicht die Session-ID selbst. Deswegen ist
session_destroy() trotzdem
nicht unsicher, denn es wird nur das Session-Cookie auf diesem einen
Client nicht gelöscht. Ein anderer Client erhält eine andere ID, und
wenn auf dem gleichen Client zwei Benutzer arbeiten, sind die Daten
schon zerstört worden.
Unterscheiden sich diese IDs nur in wenigen Stellen oder wird
immer die gleiche Session-ID generiert, handelt es sich um einen
untauglichen Generierungsmechanismus. Eine Einbeziehung der IP-
Adresse oder der aktuellen Uhrzeit im Zusammenhang mit einem
Hash-Algorithmus ist ebenso unsicher wie die Erhöhung einer Zahl
um einen bestimmten Wert – schließlich lässt sich beides mit mehr oder
minder hohem Aufwand voraussagen.
Wie sollte eine Session-ID
aufgebaut sein?
Außerdem sollte die Länge der Session-ID mindestens 32 Zeichen
betragen, um ein zufälliges Erraten oder Ausprobieren von Session-IDs
zu verhindern. Für die Session-ID sollten alle Buchstaben in ihrer
Groß- und Kleinschreibungsvariante zuzüglich der Zahlen 0–9 ver-
wendet werden.
Zusammenfassend kann man sagen, dass für Sessions nie client-
bezogene Daten wie IP-Adresse oder User-Agent als alleiniges Merk-
mal benutzt werden dürfen. Diese Daten dürfen nur im Zusammen-
hang mit einem wirklich zufälligen Wert verwendet werden – Unix-
Zeitstempel sind sicher nicht zufällig. Die Länge der Session-ID sollte
mindestens 32 Zeichen betragen. Dies kann durch die Verwendung
eines Hashalgorithmus wie MD5 geschehen.

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