Christian Seiler: Session-ID - Sicherheitslücke?

Beitrag lesen

Hallo Hans,

wie könnte ich sowas unterbinden?

Erraten: Das kannst Du nicht. Allerdings: Eine PHP-Session-ID ist ein MD5-Hash. Ein MD5-Hash ist 128 bit groß; d.h. Du hast 2^128 = 340282366920938463463374607431768211456 verschiedene Möglichkeiten. Das dauert dann schon, das zu erraten.

Gegen Leute, die sich vergessen auszuloggen, kann man allerdings nichts tun. Höchstens das Timeout verkürzen, was dann andere aber wieder verärgern wird...

Gegen das Auftauchen der Session-ID im Referer haben sich Leute auch schon Dinge ausgedacht. Du musst im Prinzip ein Script dazwischenschalten:

http://domain.test/redirect.php?url=http%3A%2F%2Fwww.example.org%2F

Bsp:

Ich befinde mich in: http://domain.test/index.php?PHPSESSSID=abcde

Dort ist dann ein Link auf http://domain.test/redirect.php?url=http%3A%2F%2Fwww.example.org%2F.

Falls use_trans_sid *deaktiviert* ist, sollte redirect.php ganz normal auf http://www.example.org/ weiterleiten, da nichts durchsickern kann. Falls aber use_trans_sid *aktiviert* ist, wird im Browser http://domain.test/redirect.php?url=http%3A%2F%2Fwww.example.org%2F&PHPSESSID=abcdef statt http://domain.test/redirect.php?url=http%3A%2F%2Fwww.example.org%2F aufgerufen. (PHP denkt zu sehr mit) Daher muss redirect.php automatisch erkennen, ob $_GET["PHPSESSID"] existiert und wenn ja, soll es nochmal auf http://domain.test/redirect.php?url=http%3A%2F%2Fwww.example.org%2F weiterleiten, damit ganz sicher nichts im Referer auftaucht. redirect.php selbst sollte wirklich nur die Weiterleitung realisieren und keine Session starten, sonst könnte trans_sid ja wieder greifen.

Prinzipiell könnte redirect.php so aussehen:

<?php
if (isset ($_GET["PHPSESSID"])) {
  Header ("Location: http://".$_SERVER["HTTP_HOST"].$_SERVER["PHP_SELF"]."?url=".urlencode ($_GET["url"]));
  exit;
}

Header ("Location: " . $_GET["url"]);
?>

Sollte ich auch immer die IP prüfen?

Nein, sonst sitzen Dir die AOL-User im Nacken. (die gehen nämlich alle über eine Art Proxy-Cluster oder so etwas ähnliches hinaus und ihre IP kann innerhalb von Sekunden wechseln - so heißt es zumindest)

Wie lange sollte eine Session denn aktiv sein

So kurz wie möglich, so lange wie nötig. ;-)

und wie kann ich das über PHP einstellen (vielleicht mit "ini_set")?

ini_set, allerdings vor session_start(), sonst klappt es teilweise nicht.

Viele Grüße,
Christian