Hello,
Ich habe die Datei in einem Testverzeichnis abgelegt, das Testverzeichnis ist NICHT durch .htaccess gesichert.
http://www.e-tn.de/sandbox/cgitest/test.php5
Allerdings kann ich mich da nicht einloggen. Wie schon gefragt - woher weiß die function authenticate(), in gegen welche Datei sie die Login-Daten validieren soll? Wo schreibe ich den Username und das Passwort rein?
Die Funktion authenticate() weiß das gar nicht, die sorgt nur für den Versand des Headers mit dem Statuscode 401.
über doe Zeile
$data = file_get_contents("userdata.dat"); ## liegt z.B. im include_path
wird die Login-Daten-Datei einelesen.
Die solltest Du vorher mit dem Hilfs-Script create_userdata() erzeugt im selben Verzeichnis. Das ist jetzt nur zum testen, später muss die entweder woanders liegen, mit führendem Punkt geschützt werden gegen HTTP-Zugriff oder man nimmt gleich die offizielle .htaccess-Passwrot-Datei. Die müsste dann aber noch geparst werden und außerdem müsste jedes übermittelte Passwort noch verschlüsselt werden vor dem Vergleich. Das aber später.
Mich interessiert insbesondere, ob die Server-Variable bei PHP-CGI vorhanden ist.
$_SERVER['HTTP_CGI_AUTHORIZATION']
Ja, das wäre interessant...
Das Dumme ist nur, dass die nur vorhanden ist, wenn der Authorization-Header vom Client mitgesandt worden ist und der sendet den nur mit, wenn er einmal durch den Vorgang "Status 401" erfolgreich durchmarschiert ist.
Ich befürchte, dass das Zerlegen des Feldes in "BASIC" n Leerzeichen und den String für Username und Passwort nicht sauber funktioniert, da ich mit explode() in meinem Beispiel nur mit einem Leerzeichen trenne und nicht mit unterschiedlich vielen.
Tausch mal das Stück Code aus
if (isset($_SERVER['HTTP_CGI_AUTHORIZATION']))
{
#$_auth = explode(' ',$_SERVER['HTTP_CGI_AUTHORIZATION']);
$_auth = preg_split('#\s+#', $_SERVER['HTTP_CGI_AUTHORIZATION']);
$cred = base64_decode(trim($_auth[1]));
$_UN_PW = explode(':', $cred);
}
Alle Verzeichnisse werden nur durch Scripte aufgelistet.
Wie meinst?
nicht mehr durch den index-Mechanismus des Servers, sondern durch ein Script, dass sich die Dateinamen z.B. mit glob() beschafft und dann eine Link-Liste daraus macht.
Es bleibt spannend...
Ja, denn es lohnt sich nur, das sauber auszuarbeiten, wenn es bei CGI auch funktioniert.
Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)