HTTP-Authentifizierung abmelden
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abbruch
benutzer
betrieb
browser
button
code
datei
datum
erinnern
header
http
index
liegen
log
opus
problem
re
server
test
vermutung
-
Unter [link]http://ref="/tag/opus">opus.lima-city.de/download/index.php[/link] (user: test, password: test) habe ich eine Seite gestellt, über die sich Benutzer mit einem Kennwort Dateien vom Download-Server herunterladen können. Die Authentifizierung erfolgt über HTTP. Das Problem ist nun, wenn ich einen Benutzernamen eingegeben habe, werden die Daten vom Browser immer automatisch mitgesendet. Da der Inhalt abhängig vom eingegebenen Benutzernamen ist, möchte ich zwischendurch über einen Link auf eine Neueingabe verweisen können. Weiß einer, wie das um zu setzen ist?
Meine Codes:
index.php
<?php include("inc/conf.conf"); if (!isset($_GET['inc']) || $_GET['inc']=="") $_GET['inc']="home"; if ($_GET['inc']=="down" ||$_GET['inc']=="admin") { $is=false; if(!isset($PHP_AUTH_USER) || ($_GET['log']=="logout" && $PHP_AUTH_USER) || ($_GET['inc']=="admin" && $PHP_AUTH_USER!="admin")) { Header("WWW-Authenticate: Basic realm=OPUS Download"); Header("HTTP/1.0 401 Unauthorized"); //auf diese Seite wird der User geschickt wenn er sich falsch authorisiert. exit; } else { // Benutzername und Passwort liegen vor $PHP_AUTH_PW = md5($PHP_AUTH_PW); $db_link = mysql_connect($db_host, $db_user, $db_pw); $res=mysql_db_query ($db_name,"select password,allowvisit from downopus where user='".$PHP_AUTH_USER."'"); $num=mysql_num_rows($res); if ($num==0)/* kein treffender Datensatz*/ { Header("HTTP/1.0 401 Unauthorized"); exit; } else { $row = mysql_fetch_assoc($res); $_GET['allowvisit']=$row['allowvisit']; $is=true; $_GET['log']="new"; } } if ($_GET['log']=="logout") $_GET['log']="new"; if ($is===false) Header("Location: index.php?inc=home"); //auf diese Seite wird der User geschickt wenn er den Cancel-Button klickt. } ?> <html> ... <table width="175" border="0" cellpadding="0" cellspacing="0" id="menu1" align="center" > <tr> <td class="rubrik"> Menü </td> </tr> <tr> <td ><a href="index.php?inc=home" > Home</a></td> </tr> <tr> <td><a href="index.php?inc=down&allowvisit=<?php echo $_GET['allowvisit']; ?>" > Download</a></td> </tr> <tr> <td><a href="index.php?inc=admin" > Administration</a></td> </tr> <?php if ($is===true): ?> <tr> <td><a href="index.php?inc=down&log=logout&allowvisit=<?php echo $_GET['allowvisit']; ?>" > Neuanmelden</a></td> </tr> <?php endif; ?> </table> ... <?php include ("inc/".$_GET['inc'].".inc"); ?> ... </html>
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo,
indem du die Variable mit
<? unset($HTTP_AUTH_USER); ?>
wieder zurück setzt, wird die Auth. aufgehoben
Grüßle -
Das habe ich schon ausprobiert. Es funktioniert leider nicht; wahrscheinlich, weil der Browser die Daten immer noch gespeichert hat und weiter mitsendet.
Ich habe auch schon vorher die Variable mit "" zu überschreiben versucht – klappt alles nicht. -
Und was bringt das zurücksetzen von $PHP_AUTH_USER sowie $PHP_AUTH_PW?
-
@opus: das klappt auf jeden Fall, du mußt nur das Unset vor deiner "If (!isset($HTTP_AUTH_User) ..." machen!
-
Das habe ich schon ausprobiert. Ich hatte oben in Zeile 5 des Programms folgendes drinstehen:
<? if ($_GET['log']=="logout") { unset($HTTP_AUTH_USER); Header("Location: index.php?inc=home"); } ?>
Das Ergebnis war: Es wurde nur nach index.php?inc=home umgeleitet aber nach einem Klick auf den Download-Link war ich wieder genauso wie vorher drin. Es werden nämlich mit dem PHP-Befehl unset() nicht die Daten gelöscht, die sich im Browser befinden. Aber irgendwie muss es doch trotzdem funktionieren, so wie bei phpMyAdmin zum Beispiel.
Außerdem habe ich das Problem, dass ich bei Abbruch oder Fehleingabe nur eine leere Seite zu sehen bekomme. Woran kann das liegen? -
Hallo!
Also ganz kurz meine Vermutung:
Es liegt an Lima-City...
Es ist irgendwie so, dass die Einträge "PHP_AUTH_USER" und "PHP_AUTH_PW" in der globalen Variable "$_SERVER" fehlen!!! Dadurch ist es auch nicht möglich ein Logout zu machen...
Auf meinem Xampp Server auf meinem PC sind gerade eben diese Einträge vorhanden und es funktioniert einwandfrei!
Ihr könnt dies gerne Überprüfen mit PHP! Einmal auf Lima-City und auf einem eigenen Xampp Server...
print_r($_SERVER);
Ich habe leider noch kein Work-Around gefunden, also wenn einer weiß wies geht, dann BITTE weitererzählen... ;)
Viele Grüße,
Micha
---------------------------------------------
Korrektur !!!
---------------------------------------------
Hallo, ich habe eine Lösung gefunden!!!
Also, ich hab mich jetzt mit der Vermutung beschäftigt und mein Problem gefunden...
Es lag bei mir komischer Weiße daran, wie das Realm bezeichnet wurde...
PHP - Code
header('WWW-Authenticate: Basic realm="ADMIN-AREA"');
Obwohl hier das Realm "ADMIN-AREA" bezeichnet wird, wird bei dem Aufruf komischer Weiße irgendwie das Realm "ADMIN-AREA-33" aufgerufen...
Meine Lösung war in der .htaccess datei das realm umzubenennen in gerade eben diesen falschen Realm Namen...
Meine Lösung:
.htaccess - Code
... AuthName "ADMIN-AREA-33" ...
PHP - Code
... unset($_SERVER['PHP_AUTH_USER']); unset($_SERVER['PHP_AUTH_PW']); unset($_SERVER['PHP_AUTH_DIGEST']); header('WWW-Authenticate: Basic realm="ADMIN-AREA"'); Header('HTTP/1.0 401 Unauthorized'); ...
Beitrag geändert: 10.9.2008 22:17:00 von mickare -
Ich habe den Code nun wie folgt modifiziert:
<?php .. if($_GET['log']=="logout" && $loo!=true) { $loo = true; $_GET['log']="new"; unset($_SERVER['PHP_AUTH_USER']); unset($_SERVER['PHP_AUTH_PW']); unset($_SERVER['PHP_AUTH_DIGEST']); Header("WWW-Authenticate: Basic realm=OPUS Download"); Header("HTTP/1.0 401 Unauthorized"); } .. ?>
Nach der Eingabe des neuen Benutzers incl. Passwort erscheint die Maske immer wieder. Erst bei Abbruch wird auf die richtige Seite umgeleitet.
Ich habe im Verzeichnis der index.php kein .htaccess, sondern diese liegt im Unterverzeichnis inc/ aus welchem die index.php bei erfolgreicher Anmeldung die richtige Datei includiert.
Ihr könnt ja alles mit den beiden Benutzern(Passwörtern) test(test) und test2(test2) ausprobieren.
Beitrag geändert: 11.9.2008 12:49:54 von opus -
Möchte mir keiner helfen?
-
Also, ich kenne mich mit dem Thema nicht besonders aus, aber ich denke, Dein Problem ist der Browser: zumindest der IE fragt nicht bei jedem Seitenabruf, ob er denn das irgendwann mal eingegebene Login mitsenden soll - wenn der Server danach fragt, gibt er's halt zurück.
Von daher vermute ich, daß Du auf Server-Seite letzlich machtlos bist.
Ich kann mich auch nicht erinnern, jemals bei einer über die HTTP-Authorisierung (!) gesicherten Site ein "Logout" gesehen zu haben.
-
dis-order schrieb:
Ich kann mich auch nicht erinnern, jemals bei einer über die HTTP-Authorisierung (!) gesicherten Site ein 'Logout' gesehen zu haben.
Und wie funktioniert bitte der Exit-Button bei phpMyAdmin? -
Und wie funktioniert bitte der Exit-Button bei phpMyAdmin?
Gute Frage. Allerdings habe ich den Verdacht, daß das irgendein Hack ist, weil ich zu phpMyAdmin und Problemen mit der HTTP-Authorisierung gelesen habe, daß könne daher kommen, daß man schon in der .htaccess-Datei etwas aufgesetzt habe.
Ich habe phpMyAdmin noch nie mit HTTP-Authorisierung gesehen.
Vielleicht habe ich mich da auch falsch ausgedrückt: Mit "HTTP-Authorisierung" meine ich die Authorisierung, wo deine PHP-Programmierung nichts von weiß (weil sie vom HTTP-Server abgewickelt wird, also bei Apache (typischerweise) über .htaaccess-Files konfiguriert); jene, bei der man bei der Anmeldung in einem nicht Server-seitig konfigurierbaren Pop-Up-Fenster nach Login und Paßwort für etwas, das der Server als Text vorgibt, gefragt wird.
phpMyAdmin hier bei lima-city.de ist z.B. auf andere Art gesichert.
Ich habe mal kurz versucht, phpMyAdmin mit http-Authorisierung in Betrieb zu nehmen, bin aber gescheitert.
-
Bei der von mir verwendeten Variante wird über PHP zum dieses Dialogfensters geführt.
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage