|
| |
Download | Testen Um Verzeichnisse mit einem Passwort zu schützen, muss man bei einem Apache-Server nur ein paar Zeilen in die .htaccess eintragen - und schon ist ein Bereich sicher vom Rest der Welt getrennt. Um jedoch ein Administrations-System mit einem Passwort zu schützen, was für viele verschiedene Benutzer mit unterschiedlichen Benutzernamen und Passwörtern erreichbar sein soll, reicht diese simple Art des Schutzes nicht aus. Mit PHP lässt sich in Verbindung mit einer MySQL-Datenbank etwas Derartiges leicht realisieren. Wie dies funktioniert, möchten wir im Folgenden erläutern. Bei diesem Login-Verfahren verzichteten wir bewusst auf Cookies (da viele User sie nicht annehmen) und die Authentifizierung per HTTP-Header (da dies nur bei der PHP-Modul-Version funktioniert). Wenn Sie testen möchten, wie das Ganze aussehen könnte, gucken Sie im Bereich Service unter Unserere Angebote nach. Dort verwenden wir ein ähnliches Login-Verfahren zum Administrieren des kostenlosen Gästebuches. Sollten Sie Fragen zum Script haben, so wenden Sie sich an das Forum. Und nun folgt die Erklärung: Sie brauchen zunächst eine Tabelle, in der die Informationen zu den Usern gespeichert werden. Es müssen die Spalten "usr" und "pwd" enthalten sein. Weitere Informationen wie eMail-Adresse o.ä. sind optional. In der Spalte "pwd" werden die Passwörter in verschlüsselter Form gespeichert, sie erhält somit eine Länge von 28 Zeichen. Beispiel-Syntax:
In einer weiteren Tabelle werden die Informationen über den aktuellen Login gespeichert. Hier werden der Benutzername, eine Nummer die den Benutzer eindeutig identifiziert (uin = user identification number) und den Zeitpunkt, wann der Login nicht mehr gültig ist gespeichert. Aus Sicherheitsgründen werden zusätzlich noch die IP-Adresse und die Browser-Kennung gespeichert. Die UIN wird später aus der mit dem MD5-Verfahren md5() verschlüsselten Unix-Timestamp generiert.
Ein Beispiel-Eintrag für die Tabelle "login" wäre:
Die login_check.php3 besitzt die zentrale Aufgabe des Login-Verfahrens. Sie überprüft, ob die übermittelte UIN gültig ist. Daher muss login_check.php3 vor jedem Script ausgeführt werden. Dazu muss die allererste Zeile in jedem zu schützenden PHP-Script die folgende sein: <?php require("login_check.php3"); ?> Alternativ kann auch eine .htaccess erstellt werden, die die folgende Zeile enthalten muss: php3_auto_prepend_file login_check.php3 Dies funktioniert allerdings nur bei Apache mit PHP als Modul! Achtung: In jeder zu schützenden Datei (wo auch die login_check.php3 per include aufgerufen wird) muss bei den Links zu einer weiteren geschützten Seite die UIN übergeben werden. Der Link sollte dann so aussehen: <A HREF="datei.php3?UIN=<?php echo $UIN; ?>">bezeichnung</A> login_check.php3 baut zunächst eine Verbindung zur Datenbank auf. Als erstes werden aus der Tabelle "login" alle Einträge gelöscht, deren Gültigkeit (expire) abgelaufen ist. Daraufhin wird eine Abfrage gestartet, ob in der Tabelle "login" ein Eintrag vorliegt, der mit der UIN, dem Browser und der IP-Nummer des Benutzers übereinstimmt. Wurde ein Eintrag gefunden, wird der Benutzername ausgelesen und die Zeit, bis wann der Login gültig ist wieder hochgesetzt. Hierbei bietet sich eine halbe Stunde an ($expire = time() + 60*30;). An dieser Stelle können noch weitere Informationen über den Benutzer ausgelesen werden, die in der Tabelle "user" gespeichert sind, damit sie in jeder PHP-Datei als Variablen oder Konstanten verfügbar sind. Wurde in der Tabelle "login" kein Eintrag gefunden, wird die Datei "login.php3" aufgerufen, welche sich um den eigentlichen Login kümmert.
Die Datei "login.php3" ist für die Eingabe des Benutzernamens und des Passwortes zuständig, sowie der Zuteilung der UIN. Zunächst wird in der "login.php3" geprüft, ob bereits Benutzername und Passwort übergeben wurden. Wenn nicht, so wird ein entsprechendes Formular ausgegeben. Nach Absenden des Formulares wird die "login.php3" erneut aufgerufen und der Benutzername und das Passwort werden übergeben. Es findet nun eine Abfrage statt, welches überprüft, ob ein es eine Kombination der eingegebenen Daten in der Tabelle "user" gibt. Wurde kein Datensatz gefunden, wird die entsprechende Fehlermeldung ausgegeben. Ansonsten wird die UIN berechnet: $UIN = md5(uniqid(rand())); Daraufhin können die Informationen über den Benutzer in der Tabelle "login" gespeichert werden. Vorher kann jedoch jeder Datensatz mit dem aktuellen Benutzer gelöscht werden, falls es nicht möglich sein soll sich mehrfach einzuloggen.
|
| ||