PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Authentifizierung via header() für ein ganzen Ordner?


Funjoy
25.12.2005, 17:34:10
Hallo,

Ich habe da eine Frage: Kann man die Authentifizierung für $_SERVER['PHP_AUTH_USER'] auch für einen ganzen Ordner vornhemen via PHP oder primär mit der Header()-Funktion? Weil wenn ich den Wert für $_SERVER['PHP_AUTH_USER'] in meiner login.php-Datei setze, dann ist $_SERVER['PHP_AUTH_USER'] nur für die Datei login.php authentifiziert. Also mein Login-Script werde ich mal offen darlegen, vieleicht weiß ja dann einer Bescheid.

Login Formular (HTML):<form action="login.php?pfad=anmelden{$session}" method="post" name="login">
<fieldset>
<legend>Login</legend>
&raquo;&nbsp;Benutzername<br />
&nbsp;&nbsp;&nbsp;<input type="text" class="forms" name="benutzername" size="15">
<br />
&raquo;&nbsp;Passwort
<br />
&nbsp;&nbsp;&nbsp;<input type="password" class="forms" name="passwort" size="15">
<br />
&nbsp;&nbsp;<input type="checkbox" name="cookie"> <small style="font-size:8px;cursor:help;" title="Für diese Funktion müssen Coockies akzeptiert werden!">Automatisch Anmelden</small>
<br />
<br />
<div align="right"><input type="submit" class="forms" value="Login"></div>
<br />
&raquo;&nbsp;<a href="login.php?target=forget{$session}">Passwort vergessen?</a>
<br />
&raquo;&nbsp;<a href="login.php?pfad=registrieren{$session}">Regestrieren</a>
</fieldset>
</form>

PHP Datei login.php:<?php
...
if(isset($db_benutzerdaten->userid)) {
//> Wenn Überprüfen erfolgreich war User in die Useronline liste aufnehmen.
$db->sql_normal_query("INSERT INTO ".$mysql['prefix']."loginsession
(benutzerid,online_seit,zuletzt_aktiv)
VALUES
('".$db_benutzerdaten->userid."',NOW(),NOW())");

//> Gast Authorisieren.
$_SERVER['PHP_AUTH_USER'] = $db_benutzerdaten->userid;
$_SESSION['login'] = TRUE;
$db->free_result();

//> User Weiterleiten
header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/nachricht.php?item=1".$session);
die();
} else {
//> User Weiterleiten
header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/nachricht.php?item=2".$session);
die();
}
} else {
//> Ohne Cookie (Autologin)
$db_benutzerdaten = $db->sql_object_excute("SELECT
userid,mitgliederid,username,passwort,email,aktiviert,rechte
FROM
".$mysql['prefix']."user
WHERE
username='".strtolower($_POST['benutzername'])."'
AND
passwort='".md5($_POST['passwort'])."'
AND
aktiviert='1'");

if(isset($db_benutzerdaten->userid)) {
//> Wenn Überprüfen erfolgreich war User in die Useronline liste aufnehmen.
$db->sql_normal_query("INSERT INTO ".$mysql['prefix']."loginsession
(benutzerid,online_seit,zuletzt_aktiv)
VALUES
('".$db_benutzerdaten->userid."',NOW(),NOW())");

//> Gast Authorisieren!
$_SERVER['PHP_AUTH_USER'] = $db_benutzerdaten->userid;
$_SESSION['login'] = TRUE;
$db->free_result();

//> User Weiterleiten
header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/nachricht.php?item=1".$session);
die();
} else {
//> User Weiterleiten
header("Location: http://".$_SERVER['HTTP_HOST'].dirname($_SERVER['PHP_SELF'])."/nachricht.php?item=2".$session);
die();
}
}
}
...
?>

Meine Frage ist also: Wie kann ich die Variable $_SERVER['PHP_AUTH_USER'] für ein ganzen Ordner authentifizieren?

MfG Funjoy

meikel (†)
25.12.2005, 21:40:43
Meine Frage ist also: Wie kann ich die Variable $_SERVER['PHP_AUTH_USER'] für ein ganzen Ordner authentifizieren?
So nicht.

Das Prinzip da nachlesen:
12.7. Apache: Wie kann ich ein Verzeichnis mit PHP mit einem Passwort schützen?
http://www.php-faq.de/q/q-apache-php-passwort.html

Funjoy
26.12.2005, 04:11:55
Hmm also geht das nicht wie ich das wollte.

Ich sende ja via Html Formular die Daten, muss ich also in jeder Datei des Ordners die Datei die Variable $_SERVER['PHP_AUTH_USER'] Authentifizieren. Schade dachte es gibt ein header() Befehl wo ich das gleich für den gesamten Ordner machen kann quasi ne Simulation zur Passwort Dialog Box.

MfG Funjoy

meikel (†)
26.12.2005, 08:29:30
Schade dachte es gibt ein header() Befehl wo ich das gleich für den gesamten Ordner machen kann quasi ne Simulation zur Passwort Dialog Box.
Das
Header("WWW-Authenticate: Basic realm=\"My Realm\"");
Header("HTTP/1.0 401 Unauthorized");
echo "Text to send if user hits Cancel button\n";
exit;
muß gesendet werden, wenn $_SERVER['PHP_AUTH_USER'] leer ist oder nicht existiert.
Dann erzeugt der Client das Paßwortfenster und schickt ab sofort bei jedem weiteren Request $_SERVER['PHP_AUTH_USER'] und $_SERVER['PHP_AUTH_PW'] zum Server.

Was nicht geht:
ein eigenes Formular kreieren. Dann schickt der Client die Angaben nur einmal mit.

Funjoy
26.12.2005, 14:27:34
Jo schade dachte esfunktioniert sodann wäre das Login script sicher gewesen aber muss ich halt auf Session zurückgreifen.

Danke für die Aufklärung

MfG Funjoy