HTTP-Authentifizierung Neuanmeldung
johny7
- php
Auf einem Internetprojekt biete ich unter http://opus.lima-city.de/download/index.php einen Download an. Allerdings soll der Besucher nicht ohne weiteres auf den Link Zugriff erhalten sondern über die Eingabe eines Benutzernamens und Kennwortes. (Es gibt zu Testzwecken zwei Benutzer:Passwörter – test:test, test2;test2)
Die Authentifizierung erfolgt über HTTP. Allerdings gibt es keine .htaccess im Verzeichnis der index.php. Es werden nur die richtigen Dateien abhängig von der Eingabe des Benutzernamens aus einem mit .htaccess geschützten Verzeichnis includiert. Bei Eingabe des richtigen Kennwortes läuft alles Korrekt. Nur beim Abbruch erscheint eine leere Seite. Außerdem wollte ich die Möglichkeit anbieten, sich unter anderem Nutzernamen neu an zu melden. Wenn ich auf den Link klicke erscheint auch ordnungsgemäß die Anmelde-Box, aber sie wird bei Eingabe der richtigen Daten trotzdem immer wieder auf gerufen. Wenn man dann irgendwann auf "Abbrechen" klickt, wird man trotzdem korrekt weitergeleitet. Kann mir jemand sagen, wie das Funktioniert?
Mein Code (auszugsweise):
<?php
include("inc/conf.conf"); // Datenbank-Verbindungsdaten
if ($_POST['load']=="load") include("inc/down.php"); // Aktion, wenn die Datei heruntergeladen wird
if (!isset($_GET['inc']) || $_GET['inc']=="") $_GET['inc']="home"; // Setzen der Variablen für den ersten Aufruf
if($_GET['log']=="logout" && $loo!=true) // Wenn Logout gewählt
{
$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");
}
if ($_GET['inc']=="down" ||$_GET['inc']=="admin") // Download oder Administration gewählt
{
$is = false;
if(!isset($PHP_AUTH_USER) || ($_GET['inc']=="admin" && $PHP_AUTH_USER!=$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 ($is===false) Header("Location: index.php?inc=home"); //auf diese Seite wird der User geschickt wenn er den Cancel-Button klickt.
}
?>
/* HTML-Code mit Kopf etc. */
<table border="0" cellpadding="0" cellspacing="0" width="175" >
<tr>
<td ><img src="images/space.gif" width="1" height="72" border="0" alt=""></td>
</tr>
<tr>
<td valign="top" align="center" width="100%" >
<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>
/* weiterer Code */
<?php
include ("inc/".$_GET['inc'].".inc");
?>
/* ... */
</html>
Hinweis: Auf dem Webspace, auf der ich meine Seite portiere, wird offensichtlich hinter die Angabe des realm noch "-33" angehängt. Ein User der Plattform gab an, man könne diese Ausgabe umgehen, indem man in die .htaccess dieses "-33" an die Bezeichnung hängt. Das Problem bei mir ist, ich habe im Verzeichnis der index.php keine .htaccess, weil index.php für alle ohne Benutzernamen und Kennwort sichtbar sein soll.