Hallo,
Ja, daran habe ich auch gedacht, aber auch gelesen, dass von einigen Browsern die REFER-Angabe nicht bzw. nicht richtig übertragen wird. Ist dies eher die Ausnahme oder eher Regelfall?
Von Opera weiß ich's nicht, Mozilla machts auf jeden Fall korrekt, IE und NN4 AFAIK auch (da kann ich mich aber auch irren). Du kannst ja eine Session-Variable setzen, die beim Login auf true gesetzt wird (z.B. $referer_check) und beim Aufruf danach auf false. Wenn die Variable auf true gesetzt ist, dann ein falscher Referer gesendet wird, dann wird eine andere Session-Variable (z.B. $supports_referer) auf false gesetzt und die Session läuft im "weniger sicheren Modus" ab, wenn der Referer passt, dann wird $supports_referer auf true gesetzt und die Session läuft im sichereren Modus.
Bsp-Code:
-------- login.php o.ä. -------------
function login (...) {
...
$_SESSION["referer_check"] = true;
$_SESSION["supports_referer"] = false; // damit er nicht gleich wieder zum Login-Bildschirm kommt, wenn die Seite nach dem Login gesendet wird
}
-------------------------------------
-------- prepend.php o.ä. -----------
...
// falls im Safe-Mode - extracte den Session-array
// alternative: du verwendest immer $_SESSION
extract ($_SESSION);
...
if ($supports_referer && !(...referer-check per regexp o.ä....)) {
display_login_form (); // o.ä.
}
if ($referer_check && !(...referer-check per regexp o.ä....)) {
// achtung, zur Erinnerung: damit ein Variablenwert in der Session
// registriert wird, muss er in den $_SESSION-Array geschrieben
// werden und NICHT in die entspr. globale Variable
$_SESSION["supports_referer"] = false;
} else {
$_SESSION["supports_referer"] = true;
}
// referer_check IMMER auf false setzen
$_SESSION["referer_check"] = false;
...
-------------------------------------
Aber noch etwas:
Eine Session-ID ist ein MD5-Hash. Selbst wenn man alle durchprobiert, hat man 36^32 (= ca. 6,33*10^49) verschiedene Möglichkeiten (wenn bei einem MD5-Hash Zahlen und Buchstaben beliebig verteilt sind und er nur Zahlen und Buchstaben enthalten darf - so genau hab' ich mich da noch nicht mit auseinandergesetzt) - das ist mit heutigen Rechnern so gut wie unknackbar. Und falls so was knackbar wird, kann man immer noch 2 Hashes aneinanderhängen (dann sind's 36^64 versch. Möglichkeiten). Ich denke, ein Username und ein Passwort ist einfacher geknackt als eine Session-ID.
Grüße,
Christian