.htaccess: Unterschied zwischen den Versionen
(Baustelle beendet. Absatz: Passwortschutz von CGI- und PHP-Anwendungen - gelöscht da es keine bestätigen kann) |
(Abschnitt zum Passwortschutz von PHP-Anwendungen wiederhergestellt und inhaltlich korrigiert.) |
||
Zeile 47: | Zeile 47: | ||
Die letzte Zeile verweist natürlich auf die von uns angelegte .htpasswd. | Die letzte Zeile verweist natürlich auf die von uns angelegte .htpasswd. | ||
===Passwortschutz von CGI- und PHP-Anwendungen=== | |||
Mit dem beschriebenen Mechanismus können selbstverständlich auch PHP-Skripte und CGI-Anwendungen vor unberechtigten Zugriffen geschützt werden. In dem geschützten Skript kann über die Umgebungsvariable <code>REDIRECT_REMOTE_USER</code> der Benutzername des Benutzers abgefragt werden, der sich angemeldet hat. | |||
In PHP-Skripten kann mit Hilfe der automatisch global sichtbaren Variablen <code>$_ENV</code> auf die Umgebungsvariablen zugegriffen werden. Um die Variable <code>REDIRECT_REMOTE_USER</code> zu lesen, schreibt man also <code>$_ENV['REDIRECT_REMOTE_USER']</code>. | |||
Anmerkung: Wer [[PHP via CGI installieren|PHP via CGI]] verwendet, muss entweder in seiner Kondigurationsdatei entweder bei <code>variables_order</code> ein "E" einfügen, damit <code>$_ENV</code> gesetzt wird, oder alternativ das Array <code>$_SERVER</code> verwenden. | |||
== Redirects == | == Redirects == |
Version vom 2. Juni 2009, 14:58 Uhr
Mit .htaccess
Dateien innerhalb der Dokument-Verzeichnisse einer Domain (z.B in subs/www oder in Unterverzeichnissen), können Einstellungen des Apache Webservers konfiguriert werden.
Zum Beispiel kann angegeben werden, welches Apache-Modul für bestimmte Dateien (oder bestimmte Datei-Endungen) benutzt werden soll, wohin Dokumente verschoben worden sind, oder auch, wer Zugriff auf die Dateien hat.
Passwortschutz für Dateien
Achtung: Sofern der Zugriff http Zugriff auf die Dateien nicht automatisch auf https:// bzw. SSL umgeleitet wird, können die Passwörter unverschlüsselt übertragen werden!
Zunächst wollen wir den Zugriff auf ein Unterverzeichnis unserer Beispiel-Domain per .htaccess einschränken. Dazu legen wir zunächst eine Passwort-Datei an. Am einfachsten lässt sich diese spezielle Passwort-Datei in einer Shell anlegen. Wir legen sie in das etc-Verzeichnis der Domain:
xyz00-doms@hopi$ cd ~/doms/example.com/etc xyz00-doms@hopi$ htpasswd -c .htpasswd peter New password: ***** Re-type new password: ***** xyz00-doms@hopi$
Beim ersten User, hier peter wird das Programm htpasswd mit der Option -c (create) aufgerufen, aber auch wirklich nur beim ersten mal, da sonst die Datei .htpasswd neu erzeugt werden würde und vorherige Einträge damit gelöscht wären.
Sollte es beim Versuch, die Datei anzulegen, zu der Fehlermeldung kommando htpasswd nicht bekannt kommen, dann müssen wir zunächst den Befehl lokalisieren und mit dem richtigen Pfad neu aufrufen:
xyz00-doms@hopi$ locate htpasswd /usr/sbin/htpasswd xyz00-doms@hopi$ /usr/sbin/htpasswd -c .htpasswd peter
Beim zweiten User erfolgt der Aufruf dann ohne die Option -c:
xyz00-doms@hopi$ htpasswd .htpasswd petra New password: ***** Re-type new password: ***** xyz00-doms@hopi$
Die Sternchen * stehen selbstverständlich für das jeweilige Passwort, welches dem User zugeordnet werden soll.
Diese Datei könnten wir auch einfach mit scp/pscp oder FTP hochladen, dabei stellt sich dann jedoch die Frage, wie wir sie erzeugen. Auf den meisten Windows-Systemen dürfte kein htpasswd-Kommando verfügbar sein. Für diese Fälle haben wir eine online-Version zur Verfügung gestellt: http://www.is4u.de/cgi-bin/mk-htpasswd.cgi ? die Ausgabe einfach mit Copy&Paste in eine Datei kopieren und diese hochladen.
Die so angelegte Passwort-Datei kann nun von einer oder mehreren .htaccess-Dateien verwendet werden. Dazu begeben wir uns in das zu schützende Verzeichnis und legen dort eine Datei .htaccess an. Dies kann wieder per Upload oder in einer Shell geschehen. Die Datei kann beispielsweise so aussehen:
order allow,deny allow from all require valid-user Authname edit Authtype Basic AuthUserFile /home/doms/example.com/etc/.htpasswd
Die letzte Zeile verweist natürlich auf die von uns angelegte .htpasswd.
Passwortschutz von CGI- und PHP-Anwendungen
Mit dem beschriebenen Mechanismus können selbstverständlich auch PHP-Skripte und CGI-Anwendungen vor unberechtigten Zugriffen geschützt werden. In dem geschützten Skript kann über die Umgebungsvariable REDIRECT_REMOTE_USER
der Benutzername des Benutzers abgefragt werden, der sich angemeldet hat.
In PHP-Skripten kann mit Hilfe der automatisch global sichtbaren Variablen $_ENV
auf die Umgebungsvariablen zugegriffen werden. Um die Variable REDIRECT_REMOTE_USER
zu lesen, schreibt man also $_ENV['REDIRECT_REMOTE_USER']
.
Anmerkung: Wer PHP via CGI verwendet, muss entweder in seiner Kondigurationsdatei entweder bei variables_order
ein "E" einfügen, damit $_ENV
gesetzt wird, oder alternativ das Array $_SERVER
verwenden.
Redirects
Redirect permanent / http://www.example.com/
Rewrite Rules
RewriteEngine On RewriteRule ^mailman/(.*)$ /cgi-bin/mailman/$1
Einstellen von MIME-Typen
# Download von Zertifikaten ermöglichen: AddType application/x-x509-ca-cert .crt
Einstellen von Datei Handlern
AddType application/x-httpd-phpcgi .php Action application/x-httpd-phpcgi /fastcgi-bin/php525stub
Verzeichnislisting ausschalten
Ruft ein Nutzer ein Verzeichnis auf, z.B. www.example.com/verzeichnis, so wird normalerweise die sich darin befindliche index.html als Standard aufgerufen. Gibt es diese Datei nicht, wird der Inhalt des Verzeichnisses gelistet.
Das kann ein Sicherheitsproblem sein und ist mit der Einstellung
IndexIgnore *
für alle Datein Unterhalb des Speicherortes der .htaccess Datei abschaltbar.
Gesperrte Optionen
Einstellungen, die es ermöglichen würden, über den Webserver Rechte anderer User zu erhalten, sind nicht erlaubt.
Da "Options FollowSymLink" hierunter fällt ist leider Options nicht erlaubt, und damit auch "Options -Indexes" und "Options +Indexes". Es ist daher nicht möglich das Directory-Listing damit abzustellen und für bestimmte Unterordner wieder zu erlauben. Als Alternative können z.B. leere index.html Dateien angelegt werden, die statt des Directory-Listings angezeigt werden. Auch mit RewriteRules, die auf Directories prüfen, müsste es gehen. Dazu dürfte es im support@ Archiv auch schon Beispiel-Workarounds geben.