Will man
das äußerst effektive und sichere Passwortschutzverfahren mittels .htaccess
Datei (auf einem Apache-Server) mit einer ansprechenden Login-Oberfläche (anstatt
dem Standard-Browser-Popup) verbinden, steht man vor einem Problem.
Es gibt zwar verschiedene andere Möglichkeiten bestimmte Seiten mit Passwort zu
schützen, dabei ist aber nicht immer gewährleistet, dass die Seite bei späterem
direktem Aufruf nicht für jedermann zu erreichen ist. Außerdem ist das Schützen
ganzer Verzeichnisse so kaum zu realisieren, was mit entsprechenden .htaccess Dateien recht einfach gelingt.
Das bekannte Popup beim Schutz über .htaccess wird vom jedem Standard-Browser geöffnet, wenn er vom Server
den Code 401 (Authorization required) erhält. Im Normalfall öffnet sich dieses
Popup bis zu 3 mal, wenn keine korrekte Authorisierung vorliegt. Erst nach der
dritten Falscheingabe gibt der Browser eine entsprechende Fehlermeldung des Servers aus.
Ein erster Versuch mittels eines JavaScripts (findet übrigens auch im endgültigen Skript teilweise noch Verwendung), das die Login-Daten (Benutzername
und Passwort) aus einem Formular ausliest und eine entsprechende URL zum Aufruf
der geschützten Seite generiert, hat spätestens dann einen großen Nachteil, wenn
ein ungültiger Benutzername bzw. ein falsches Passwort eingegeben wird. In diesem
Fall öffnet der Browser nämlich wieder ein Popup-Fenster zur Eingabe der korrekten
Daten, was ja gerade vermieden werden sollte.
Es muß also ein Weg her, der er ermöglicht, das eingegebene Passwort zu überprüfen,
bevor der Browser die geschützte Seite aufruft und das Popup generiert. PHP bietet
hier eine geniale aber doch recht simple Lösung:
Es werden Benutzername und Passwort aus einem Formular ausgelesen und mit diesen
eine seperate Verbindung zum Server hergestellt. Der Server "ruft" sich also quasi selbst an.
Wenn die Authorisierung nicht erfolgreich war, gibt der Server den Code 401 zurück,
der vom PHP-Skript ausgewertet wird und es erscheint sofort eine entsprechende
Fehlermeldung. Bei erfolgreicher Authorisierung (Code 200) wird ein JavaScript
(s.o.) aufgerufen, das den Browser zur geschützten URL (inkl. Anmeldedaten) weiterleitet.
Hierbei entsteht noch das Problem, das nach Weiterleitung auf die geschützte Seite
(und bei weiterer Verlinkung auf Unterseiten) Benutzername und Passwort in der
Adresszeile des Browsers im Klartext sichtbar sind. Dies kann aber ganz einfach durch eine
META-Tag-Weiterleitung gelöst werden, da der Browser die Anmeldedaten nach einmaliger erfolgreicher Anmeldung im Cache hat.
Das Skript ermöglicht es auch, jedem Benutzer ein eigenes geschütztes Verzeichnis zuzuweisen.
| benötigte
Dateien: |
Download
v1.0 (27.01.2002)  |
/htdocs/login/index.php
|
baut das Frameset für
die Login-Oberfläche auf |
/htdocs/login/main.php
|
Hauptdatei, Login-Skript |
| /htdocs/login/secret/.htaccess
|
Beispieldatei für
den Passwortschutz des Verzeichnisses |
/htdocs/login/secret/zugang.htm
|
Zugangsdatei im geschützten
Verzeichnis, leitet zur index.htm weiter |
/htdocs/login/secret/index.htm
|
Inhalt der geschützten
Seite (selbst zu erstellen) |
| /hidden/.htpasswd
|
Passwortdatei (selbst
zu erstellen, z.B. hier) |
Nachdem das ZIP heruntergeladen
und entpackt wurde, muß zuerst die Datei main.php angepaßt
werden. Dies geschieht recht einfach mittels der 4 Variablen am Anfang der Datei:
| $caption |
ist die Überschrift, die über der Login-Maske erscheint.
Formatierungen mit <FONT>-Tags
o.ä. sind möglich. |
| $host |
ist der Domainname des Servers, auf dem das Skript ausgeführt
wird (z. B. www.domain.de
oder subdomain.domain.de).
Wichtig: ohne http://
! |
| $port |
ist der Port, auf dem der Server läuft und braucht im allgemeinen
nicht geändert werden (Standard: 80). |
| $dir |
gibt das geschützte Verzeichnis an. Standardmäßig
erwartet das Skript eine Datei zugang.htm
im Verzeichnis mit dem Namen des Benutzers. Das Verzeichnis muß vom www-root
aus angegeben werden (also mit / anfangen), je nach Verzeichnisstruktur muß
also u.U. noch ein Pfad vor den vorgegebenen gesetzt werden. Wenn für alle
Benutzer dasselbe Verzeichnis gelten soll ersetzt man einfach $username
durch das gewünschte Verzeichnis. |
| $log |
= 1: Es wird eine Log-Datei über erfolgreiche und mißlungene Anmeldungen geführt (Die Datei wird beim ersten Login automatisch erstellt. Das Verzeichnis muß dazu über public-Schreibrechte verfügen).
= 0: kein Log. |
| $logfile |
ist der Dateiname der Log-Datei ausgehend vom Verzeichnis des
Skripts. |
In der
Datei index.php kann noch der <TITLE>-Tag
beliebig angepaßt werden.
In einem zentralen Verzeichnis
(wenn möglich am Besten oberhalb des vom Internet aus zu erreichenden Root-Verzeichnisses,
z.B. /hidden) die Datei .htpasswd mit den erstellten Benutzername-Passwort-Kombinationen
ablegen.
Nun
die Dateien index.php und main.php in ein beliebiges Verzeichnis
(z. B. einer Subdomain) kopieren. Unterhalb dieses Verzeichnisses beliebig viele
Unterverzeichnisse mit den Namen der gewünschten Benutzer erstellen. (Tipp: Beim
ersten Einrichten erstmal mit nur einem testen!)
In diesen Unterverzeichnissen je eine index.htm mit dem jeweiligen Inhalt
für den Benutzer erstellen.
Weiterhin je eine angepaßte zugang.htm und eine .htaccess in diese
Unterverzeichnisse kopieren.
In der zugang.htm muß nur jeweils die vollständige Zieladresse inkl.
Domain und Pfad, in welchem die Datei liegt im <META>-Tag
angepaßt werden.
In der .htaccess für alle Benutzer die Zeile AuthUserFile
anpassen (damit sie auf die Passwortdatei zeigt) und jeweils AuthName
und require user
bzgl. des Benutzernamens anpassen.
...alles hochladen und das war's...
Viel Spaß!