Hallo,
derzeit ist ein Verzeichnis mit htaccess geschützt, mit einem bestimmten Passwort zugänglich.
Eine bestimmte Datei soll nun mit diesem script hier gesichert werden:
if ( (!isset($PHP_AUTH_USER)) || ! (($PHP_AUTH_USER == "$yyyy") && ( $PHP_AUTH_PW == "$xxxx" )) ) {
Header("WWW-Authenticate: Basic realm=\\"My Realm\\"");
Header("HTTP/1.0 401 Unauthorized");
error("Unauthorized access...");
}
Das Problem: Das übergeordnete Htaccess nimmt immer wieder die PHP_AUTH_USER und PHP_AUT_PW logischerweise in Gebrauch und belegt die Variablen, sprich das Einloggen des 2. (diesen hier geposteten) Scripts geht nicht, weil automatisch das eingegebene PW und User logischerweise nochmal im htacces Durchgang abgefragt werden und dort nicht stimmen. Wie kann ich dennoch die Variablen unsetten oder wie auch immer auf diese Weise einen 2. Login bzw. PW-Abfrage erzwingen
Homepage selbermachen 7.852 Themen, 35.619 Beiträge
hä? wie der pfälzer so schön sagt
;o)
also...ein verzeichnis ist mit .htacces gesichert. anscheinend auch mit den gleichen Variablen, die mein script enthalten....
Dann habe ich also noch für die einzelne Datei das von mir gepostete script. Dieses verwendet wie gesagt, wahrscheinlich die nötigen und vor allem gleichen Variablen wie htaccess.
Also im Klartext:
- Ich rufe die DAtei auf, sowohl Verzeichnis als auch die Datei einzeln ist mit einem PW und User geschützt.
- ich muss PW und User für htaccss eingeben, also damit ich erstmal in das Verzeichnis komme
- Danach muss ich PW und User für die Datei bzw. das einzlene Script eingeben
Das klappt aber jetzt nicht, weil er denkt, dass PW und User, welche beide für die Datei gedacht sind, wieder für htaccess gelten, und dort geht das natürlich nicht
das ist superkompliziert erklärt, wobei das Problem extrem einfach ist
Hier habe ich mal ein Beispiel erstellt:
Gehe auf diese Datei
klick
Als erstes wirst du per htaccess abgefragt, hierfür ist Passwort und Username: demo
Dann erfolgt die Abfrage des Schutzes für die einzelne Datei nickles.php und da ist dann username: nickles und Passwort: datei
Dann wirst du sehen, dass man immer auf den htacces schutz wieder trifft, und aufgefordert wird, das htaccess passwort demo einzugeben
Sorry hier nochmal die richtigen Daten für den login
Hier habe ich mal ein Beispiel erstellt:
Gehe auf diese Datei
klick
Als erstes wirst du per htaccess abgefragt, hierfür ist Passwort und Username: nickles
Dann erfolgt die Abfrage des Schutzes für die einzelne Datei nickles.php und da ist dann username: nickles und Passwort: datei
Dann wirst du sehen, dass man immer auf den htacces schutz wieder trifft, und aufgefordert wird, das htaccess passwort demo einzugeben
Sorry für den flame aber ich kann meine postings nicht bearbeiten, daher...
die korrigierte url
der Passwortschutz braucht bei mir immer eine weile, wird spätestens um 16 uhr aktiv sein
viel verständlicher war das jetzt noch nicht, aber ich versuch mich trotzdem mal dran:
warum bitte schickst du dem client mit dem php-script noch einmal eine http-authentifizeriungsanweisung? es ist klar, daß der apache dann noch einmal eine http-authentifizierung verlangt.
wenn du eine PHP-AUTH nutzt, dann OHNE htaccess! wenn php als apachemodul vorliegt, dann weist es den apache an, eine authentifizierung vorzunehmen, wird die seite jedoch extern schon durch eine htacces-auth geschützt, so werden die variablen $PHP_AUTH_USER, $PHP_AUTH_PASSWORD nicht belegt und dein script bekommt immer einen leeren string geliefert.
wenn du mehreren usern den zugang abhängig vom login bereitstellen willst, dann entscheide dich für eine der authentifizierungen. entweder alles über´s script oder eine htaccess mit allen zugelassenen usern, wobei du dann aber nur noch schwer unter den usern unterscheiden kannst welcher user jetzt eingeloggt ist. die sicherheit, daß überhaupt nur authorisierte user zugang bekommen wird ja aber über die htaccess schon gewährleistet.
genau du hast das problem erfasst :)
meines ist, dass beispielsweise 10 leute auf Verzeichnis A zugreifen sollen, welches 10 Dateien beinhaltet, unter anderem 2 Dateien, auf die nur ganz bestimmte Leute dieser 10 zugreifen sollen, daher brauche ich nach Möglichkeit nochmal so eine Art htaccess schutz
schmeiß die htaccess raus und versuche es mal hiermit:
class checked_user
{
var $user;
function checked_user()
{
global $PHP_AUTH_USER,$PHP_AUTH_PW;
$auth_users=array('user1'=>'passwort1','user2'=>'passwort2','userN'=>'passwortN');
if(empty($PHP_AUTH_USER)||empty($this->auth_users["$PHP_AUTH_USER"])||$this->auth_users["$PHP_AUTH_USER"]==$PHP_AUTH_PW)
{
$this->generate_auth();
}
else
{
$this->user=$PHP_AUTH_USER;
}
}
function generate_auth()
{
header("WWW-Authenticate: Basic realm=\"Gesicherter Bereich\"");
header("HTTP/1.0 401 Unauthorized");
echo "Kein Zutritt ohne Authentifizierung!";
exit;
}
}
Wow, danke dir vielmals, wie soll ich das nur wieder gutmachen ;-)
schmeiß die htaccess raus
Wenn ich mehrere Dateien habe, auf die dein Script angewendet wird, meinst du das ist dann auch noch sinnvoll oder ist das nur bei einer oder wenigen DAteien sinnvoll, hier htaccess zu entfernen
wie schon erwähnt, die authentifizierung mit php auf diese weise funktioniert generell nur dann, wenn die datei/das verzeichnis nicht durch eine htaccess geschützt ist, denn sonst bleiben PHP_AUTH_USER und PHP_AUTH_PW leer.
by the way würde mich mal interessieren (hab mir das script mal kopiert, ich war so frei :P ) wie ich eine class oder wie ich das script überhaupt aufrufe???
eine klasse mußt du vor der nutzung instanzieren, also ein objekt diesen typs erzeugen (eine instanz der klasse). das geschieht folgendermaßen:
$MyClass=new ClassName;
jetzt hast du über die instanz mit dem namen $MyClass zugriff auf die eigenschaften und methoden der klasse.
eine eigenschaft einer klasse sind einfach gesagt ihre internen variablen (sehr vereinfacht bei php), ihre methoden sind die funktionen innerhalb der klasse. der zugriff erfolgt, anders als z.b. bei C++ mittels $Instanname->Eigenschaft/Methode. hat z.b. eine funktion innerhalb der klasse den selben namen, wie die klasse selbst, so ist es der konstruktor der klasse und wird automatisch bei der instanzierung aufgerufen. ich nehme mal das beispiel der klasse checked_user:
class checked_user
{
var $user; //Einzige Eigenschaft der Klasse
function checked_user() // Methode und Konstruktor der Klasse, wird auf jeden Fall bei der Instanzierung ausgeführt
{
global $PHP_AUTH_USER,$PHP_AUTH_PW;
$auth_users=array('user1'=>'passwort1','user2'=>'passwort2','userN'=>'passwortN'); // Array aus den zugelassenen Usern und ihrer passworte
if(empty($PHP_AUTH_USER)||empty($this->auth_users["$PHP_AUTH_USER"])||$this->auth_users["$PHP_AUTH_USER"]==$PHP_AUTH_PW)
{
$this->generate_auth(); // Konstruktor ruft die methode generate_auth() der eigenen Klasse auf
}
else
{
$this->user=$PHP_AUTH_USER; // Die Eigenschaft $user wird auf den Rückgabewert der Authentifizierung gesetzt
}
}
function generate_auth() // weitere Methode der Klasse
{
header("WWW-Authenticate: Basic realm=\"Gesicherter Bereich\"");
header("HTTP/1.0 401 Unauthorized");
echo "Kein Zutritt ohne Authentifizierung!";
exit;
}
}
$user ist eine (die einzige) eigenschaft der klasse, die funktion checked_user() ihr konstruktor und generate_auth() eine methode der klasse. will ich jetzt die klasse nutzen, so mach ich da so:
$user=new checked_user;
$user ist jetzt ein objekt und eine instanz der klasse.
der konstruktor erledigt in diesem fall den rest.
über $user->user hat man infolgedessen zugriff auf den gesetzten usernamen im weiteren verlauf des scriptes.