empty() is_null() blick ins manual!
HTACCESS mit MySQL verbinden
Einklappen
X
-
So, ich hab das jetzt nochmal überprüft. Wenn die Variablen nicht gesetzt sind, dann kommt der Login. Schicke ich dann ein leeres Login ab, dann ist die Variable zwar gesetzt, aber leer.
Ich müsste also erreichen, dass die Variable irgendwie gelöscht wird; mir unset() funktioniert es ja wie bereits festgestellt nicht. Wie kann ich es also erreichen, dass die Umgebungsvariablen gelöscht werden?
Kommentar
-
Original geschrieben von Tomcat Chriss
So, ich hab das jetzt nochmal überprüft. Wenn die Variablen nicht gesetzt sind, dann kommt der Login. Schicke ich dann ein leeres Login ab, dann ist die Variable zwar gesetzt, aber leer.
Ich müsste also erreichen, dass die Variable irgendwie gelöscht wird; mir unset() funktioniert es ja wie bereits festgestellt nicht. Wie kann ich es also erreichen, dass die Umgebungsvariablen gelöscht werden?
sieht so aus, als ob dein browser dann beim zweiten scriptaufruf diese leeren variablen erneut überträgt.
ich nehme mal an, du bist nach dem serten beispiel auf der seite über http-auth im manual vorgegangen?
dort wird ja zunächst mal nur abgeprüft, ob überhaupt zugangsdaten eingegeben wurden - falls diese falsch sein sollten, musst du natürlich ebenfalls die beiden header (authenticate und 401) erneut ausgeben ...I don't believe in rebirth. Actually, I never did in my whole lives.
Kommentar
-
Hallo Wahsaga,
Ja, genau in meinem Script wird zunächst überprüft, ob die Variablen gesetzt sind. Sind diese nicht gesetzt, dann werden die beiden Header (Authenticate und 401) aufgerufen. Der 401 wird aufgerufen, wenn man das Formular mit Cancel abbricht.
Wird OK gedrückt, werden die variablen gesetzt, egal ob das Formular gefüllt wurde oder nicht. Das ist genau das Problem. Ich überprüfe als nächstes, ob die Zugangsdaten mit den Daten in der Datenbank übereinstimmen.
Wenn das der Fall ist, soll er die index.php aufrufen, andernfalls sollen die Variablen gelöscht werden und das Script neu aufgerufen werden.
Auf php.net stand, dass die Variablen durch erneutes senden des Headers 401 gelöscht werden könnten, aber das funktioniert auch nicht. Und so wie ich das mit meinem bisschen englisch ersehen kann, gibt es da wohl viele Probleme mit, wie aus dem php.net-Forum zu ersehen ist.
Es muss doch möglich sein, diese blöden Vriablen zu löschen.
EDIT:
Ich habe es gerade nochmal probiert und habe nach dem Login folgendes eingebunden, wenn ein leeres Formular gesendet wird:
PHP-Code:if (empty ($_SERVER['PHP_AUTH_USER']))
{
Header("HTTP/1.0 401 Unauthorized");
echo "Sie müssen gültige Benutzerdaten eingeben, um die Seite zu betreten.\n";
login();
}
Zuletzt geändert von Tomcat Chriss; 30.12.2003, 14:48.
Kommentar
-
Ich hab in Script gefunden, mit dem das besser zu funktionieren scheint. Er authorisiert mich jetzt allerdings nicht mehr, auch wenn die Zugangsdaten korrekt sind.
Woran kann das liegen? Hier das neue Script:
PHP-Code:<?php
$auth = false; // Assume user is not authenticated
if (isset( $_SERVER['PHP_AUTH_USER'] ) && isset($_SERVER['PHP_AUTH_PW'])) {
include("includes/connect.inc.php");
$password = MD5($_SERVER['PHP_AUTH_PW']);
$uname = $_SERVER['PHP_AUTH_USER'];
$sql = "SELECT * FROM nuke_users WHERE uname = '$uname' AND pass = '$password'";
// Execute the query and put results in $result
$result = mysql_query( $sql )
or die ( 'Unable to execute query.' );
// Get number of rows in $result.
$num = mysql_numrows( $result );
if ( $num != 0 ) {
// A matching row was found - the user is authenticated.
$auth = true;
}
}
if ( ! $auth ) {
header( 'WWW-Authenticate: Basic realm="Private"' );
header( 'HTTP/1.0 401 Unauthorized' );
echo 'Authorization Required.';
exit;
} else {
echo '<P>You are authorized!</P>';
}
?>
Kommentar
-
Hmm, also soweit ich das aus dem Script ersehen kann, wird erstmal die Variable $auth auf false gesetzt, was zur Folge hat, dass erstmal davon ausgegangen wird, dass der User nicht authentifiziert ist.
Als nächstes wird überhaupt bevor die Authentifizierung aufgerufen wird schon erst einmal überprüft, ob die Variablen existieren.
Wenn diese existieren, werden diese mit der Datenbank abgeglichen. Wenn der Benutzer in der Datenbank vorhanden ist, wird die Variable $auth auf true gesetzt, falls der User nicht in der Datenbank ist,
Im nächsten Schritt wird überprüft, welchen Status die Variable $auth hat. Ist diese auf true gesetzt, dann wird "You are authorized" ausgegeben und alles ist wunderbar.
Ist die Variable allerdings noch auf false gesetzt, dann wird die Authentifizierung aufgerufen.
Tja weiter verstehe ich das Script noch nicht so ganz, denn er hat sogar einen Counter, wenn dreimal die falschen Daten eingegeben wurden, dann wird die Verarbeitung abgebrochen und es wird "Authorization required" ausgegeben.
Kann es evtl. sein, dass diese Variable $auth auch eine Systemvariable ist? Bei php.net hab ich jedenfalls nichts dazu gefunden.
Ich denke, ich bin jetzt auch nicht unbedingt der King im auseinandernehmen von fremden Quelltexten. Dieses habe ich jedenfalls von zend.com. In diesem Tutorial wird das ganze eigentlich Step-by-Step erklärt, auch wie man es ohne Datenbank realisieren kann.
Gruß, Chriss
Kommentar
-
Original geschrieben von Tomcat Chriss
Kann es evtl. sein, dass diese Variable $auth auch eine Systemvariable ist? Bei php.net hab ich jedenfalls nichts dazu gefunden.
Tja weiter verstehe ich das Script noch nicht so ganz, denn er hat sogar einen Counter, wenn dreimal die falschen Daten eingegeben wurden, dann wird die Verarbeitung abgebrochen und es wird "Authorization required" ausgegeben.
dieser zähler versucht diesen mechanismus nur nachzubilden, da du andernfalls mit der php-methode immer wieder nur den 401 mit erneuter aufforderung zur eingabe der richtigen zugangsdaten bekommen würdest.I don't believe in rebirth. Actually, I never did in my whole lives.
Kommentar
-
Dann wird das aber das Standardverhalten sein, denn ich kann in dem gesammten Script nichts finden, dass auch nur annähernd nach einem Zähler aussieht.
Mal noch was zur weiteren Vorgehensweise. Es ist zwar schön, dass das Script jetzt endlich funktioniert. Allerdings könnte ich so das Script nur direkt verlinken und somit bestenfalls eine PHP-Anwendung dahinter schützen.
Bisher war es jedoch so, dass mit der .htaccess das komplette Verzeichnis inkl. Unterverzeichnisse und aller Dateien geschützt wurde. Kann ich über die .htaccess festlegen, dass für die Authentifizierung dieses Script angesprochen werden soll?
Kommentar
-
Original geschrieben von Tomcat Chriss
Bisher war es jedoch so, dass mit der .htaccess das komplette Verzeichnis inkl. Unterverzeichnisse und aller Dateien geschützt wurde. Kann ich über die .htaccess festlegen, dass für die Authentifizierung dieses Script angesprochen werden soll?
dass das generell nur mit mod_auth funktioniert, hatten wir ja am anfang schon ...
wenn du das so haben willst, dann müsstest du alle dateien in ein extra geschütztes verzeichnis legen, und dann ein php-script machen, das diese dateien übers dateinsystem ausliest und an den client weiterleitet - nachdem sich dieser beim php-script ordnungsgemäß authentifiziert hat.I don't believe in rebirth. Actually, I never did in my whole lives.
Kommentar
-
Sorry, falscher Thread. Ich habe diese Lösung hier mittlerweile verworfen. Dieses Posting gehört eigentlich zum Thread Passwortverschlüsselung in .htpasswd
Nochmal sorry, Chriss
Damit ist schion erreicht, dass das Verzeichnis samt Unterdateien geschüttzt sind, denn sobald von außerhalb eine der Dateien angefasst wird, wird die Authentifizierung aufgerufen.
Das ist so schon voll und ganz ausreichend. Es geht jetzt lediglich darum, dass jetzt ein PHP-basiertes CMS dahintersitzt, dass ein Forum, eine persönliche Begrüßung und private Messages unterstützt.
Bisher hatten alle Fachhändler ein und das selbe Login, jetuzt sollen Sie persönlich begrüßt werden und eine eindeutige Bezeichnung im Portal und im Forum haben. Deswegen müssen sich sich mit eigenen Daten authentifizieren. Das müssten Sie beim Forum, beim Portal und auch beim Betreten des Verzeichnisses tun, das will ich auf einmal einloggen beschränken.
Wenn überall das gleich Login verwendet wird, dann kann ich das auch realisieren. Mit dem Portal und dem Forum geht es ja auch schon. Die gleichen Daten möchte ich jetzt noch beim htaccess-Login verwenden. Dazu möchte ich, dass bei der Registrierung das Passwort und der Username noch einmal in der htpasswd gespeichert werden.
Dazu muss ich auf das Serverscript /usr/bin/htpasswd zugreifen und die Ausgabe des Scriptes möchte ich in die htpasswd speichern. Anhand der Servervariable REMOTE_USER wird dann der User im Portal und Forum eingeloggt.
Bitte, nicht so kompliziert denken. Ich möchte nur wissen, wie ich das Serverscript ausführe und die Rückgabe in die Datei speichern kann. Das Speichern ist hierbei auch noch noicht das Problem, sondern das Ausführen des serverseitigen Scriptes.
Danke, ChrissZuletzt geändert von Tomcat Chriss; 31.12.2003, 18:55.
Kommentar
Kommentar