.htaccess


Will man seine Homepage oder zumindest einen Teil davon im Internet nicht der Öffentlichkeit zur Verfügung stellen, so muss man entweder auf eine Passwortabfrage mittels CGI-Programmen zurückgreifen oder seine Seiten mittels einer .htaccess- und einer Passwortdatei schützen.
 
Dieses Dokument soll beschreiben, wie ein .htaccess-Schutz eingerichtet wird. Damit man sich ein Bild machen kann, wie ein solcher Schutz aussieht, hab ich hier ein Beispiel.


Voraussetzung/Arbeitsweise

Voraussetzung für das Benutzen von .htaccess Dateien ist ein Server, der dies auch unterstützt. Die meisten Server, auf denen der Apache läuft, tun dies auch. Wie es mit werbefinanzierten Accounts aussieht, weiß ich nicht. In diesem Fall wird dieses Feature aber wahrscheinlich nicht zur Verfügung stehen. Fragen Sie im Zweifelsfalle ihren Webmaster.

Zur Arbeitsweise: Die .htaccess-Datei dient nicht nur dem Schutz einer Hompage sondern bietet dem Benutzer vielmehr die Möglichkeit, die Konfiguration (oder zumindest Teile davon) des Webserver anzupassen. Dazu sucht der Webserver bei Anforderung einer Datei im jeweiligen Verzeichnis die .htaccess-Datei und führt die darin aufgelisteten Änderungen durch.
 


Sicherheit

Zur Sicherheit ist folgendes zu sagen: Die Verschlüsselung der Passwörter beim .htaccess-Schutz ist sehr sicher; allerdings nur sofern Sie Passwörter benutzen, die in keinem Wörterbuch stehen. Die Passwörter sind nur mit einer Bruteforceattacke zu knacken, da sich der Algorithmus, mit dem sie verschlüsselt wurden, nicht umdrehen lässt.
 
Die Authentifizierung läuft folgendermaßem ab: Benutzername und Passwort werden in ein Popupfenster getippt. Benutzername und Passwort stehen bereits in einer Passwortdatei. Das sieht z.B. so aus:

Eva:tf2DFlo45sf

Dabei ist Eva der Benutzername und die Zeichen nach dem Doppelpunkt das verschlüsselte Passwort (im Beispiel ist das Passwort allerdings erfunden).
Das gesendete Passwort wird nun verschlüsselt und mit dem bereits verschlüsselten Passwort in der Datei verglichen. Stimmen Benutzername und Passwort überein, wird der Zugriff gewährt. Hier liegt auch die Sicherheitsschwäche von .htaccess: Wie auch bei FTP und HTTP wird alles im Klartext versandt. Man müsste also "nur" Routinginformationen fälschen und einen Sniffer platzieren, und schon kommt man an Benutzername und Passwort.

Ein anderes Sicherheitsrisiko geht man ein, wenn die .htpasswd für fremde Benutzer zugänglich ist. Der Angreifer braucht sich nur die Datei zu holen, eine Handvoll C-Code, viele Wörterbücher und Zeit, um an das Passwort zu kommen. Dabei braucht er nur immer ein Wort aus dem Wörterbuch holen, verschlüsseln und mit dem verschlüsselten Passwort vergleichen. Deshalb ist es besonders wichtig, keine Passwörter zu benutzen, die in Wörterbüchern stehen. Dazu gehören auch Namen, ausländische Wörter und zusammegesetzte Wörter. Auch das simple Anhängen oder Vorausstellen einiger Zahlen/Buchstaben an ein Wort oder das "Umdrehen" eines Wortes reichen hier nicht aus, um solchen "Bruteforce"-Attacken standzuhalten.
 
Am sichersten ist also, die .htpasswd nicht zugänglich zu machen, ein möglichst langes kryptisches Passwort zu benutzen (adhgflkuz3592ogv98q35l98pvq4 lässt sich z.B. schlecht durch Probieren herausfinden) und vor allem verschiedene Passwörter für verschiedene Accounts zu nutzen. (Dann kann ein potentieller Angreifer, der Zugang erlangt, nur an einer Stelle Schaden anrichten und nicht auch noch z.B. ihre Mailbox knacken).
 
Soviel zu unserem Ausflug über die Sicherheit und die Wahl eines guten Passwortes. Dies gilt übrigens für die gesamte Unixwelt.
 


Aufbau einer .htaccess Datei

Zu allererst ein Beispiel einer .htaccess-Datei:

AuthName        "Adminbereich"
AuthType        Basic
AuthUserFile   /document/root/pfad/htdocs/admin/.htpasswd

< Files * >
require valid-user
< /Files >

Im folgenden gehe ich nur auf einige wichtige Direktiven ein:
 
AuthNameGibt dem geschützten Bereich einen Namen (damit nach erfolgreicher Authentifizierung beim Reload nicht nochmals nach Username/Passwort gefragt wird). Dieser Text wird auch in der Abfrage angezeigt.
 
AuthTypeLegt die Art der Authentifizierung fest. Sollte auf Basic stehen bleiben.
 
AuthUserFileLegt den absoluten Pfad (= Pfad auf dem Server = Document root) zur Passwortdatei fest. In vielen Fällen ist dieser allerdings gar nicht bekannt. Hier muss wieder der Webmaster gefragt werden. Apache-Server verstehen auch den relativen Pfad (hier: admin/.htpasswd).
 
< Files * >Legt fest, welche Dateien geschützt werden. (Hier: alle). Files *.htm* schützt z.B. nur html-Dateien.
Optional ist statt < Files > auch < Limit GET POST PUT> möglich, was den Zugriff auf die http-Funktionen get (holen) post und put (senden) regelt . Beide werden durch < /Files > bzw. < /Limit > wieder beendet.
 
requireSollte auf valid-user stehen, das bedeutet der Benutzer muss in der Passwortdatei vorkommen.
 

Es ist auch möglich, bestimmte Domains oder IP-bereiche zu sperren. Auf die nähere Beschreibung verzichte ich an dieser Stelle, da dies den Rahmen dann doch etwas sprengen würde. Ich will nur ein Beispiel geben, um zu zeigen, was alles möglich ist. Eine genaue Beschreibung gibt es unter http://www.apache.org
 

AuthName        "Adminbereich"
AuthType        Basic
AuthUserFile   /document/root/pfad/htdocs/admin/.htpasswd

< Limit GET >
Order deny,allow
Deny from .name.de
Deny from name.org
Deny from 213.128 
Allow from all
< /Limit >

< Limit PUT POST >
	Order Allow,Deny
	Allow from .de
	Deny from all
	require valid-user
< /Limit >

Diese Angaben machen es möglich, dass alle Rechner (außer Rechner mit dem IP-Bereich 213.128.xxx.xxx, der subdomain " .name.de" oder der domain "name.org") Lesezugriff auf das Verzeichnis/die Seiten haben (GET = holen).
 
Senden (PUT, POST=senden) dürfen nur Rechner mit einer .de-Domain, die gleichzeitig auch in einer Passwortdatei stehen. (require vaild-user bewirkt wie oben beschrieben eine Abfrage).
 

Erzeugen einer .htpasswd Datei


Das Erzeugen einer .htpasswd-Datei geht mit Hilfe des Programms htpasswd:

user@sonne> htpasswd -c .htpasswd eva

legt eine .htpasswd-Datei neu an und erzeugt einen Eintrag für den User eva. Das Passwort wird zweimal abgefragt. (Nebenbei: das passwort wird mittels der Unixfunktion crypt verschlüsselt).
Für weitere Einträge muss die option -c weggelassen werden, sonst wird die .htpasswd überschrieben. Näheres siehe man htpasswd.
 


Einrichten des Schutzes

Dieser Schritt ist denkbar einfach. Die Datei .htaccess im zu schützenden Verzeichnis ablegen. Wenn die Datei im Ftp-Programm nicht mehr sichtbar ist, liegt das daran, dass das Programm keine versteckten Dateien anzeigt (unter Unix sind Dateien, die mit einem Punkt im Dateinamen beginnen, versteckt).
 
Die Passwortdatei sollte wenn möglich nicht in ein Verzeichnis im Document root gelegt werden, da sie sonst für jedermann sichtbar ist. Wenn dies nicht möglich ist, sollte sie ins CGI-BIN - Verzeichnis wandern oder zumindest in ein Verzeichnis, das nicht einsehbar ist. (s.o.) Man beachte, dass der jeweilige Pfad auch in der .htaccess unter AuthUserFile richtig eingetragen wird.

Falls das Programm htpasswd nicht installiert ist, kann man unter http://www.xs4all.nl/~remcovz/htpasswd.html eine Seite finden, die die Einträge generieren kann.


Weitere Infos:
http://hoohoo.ncsa.uiuc.edu/docs/tutorials/user.html
http://httpd.apache.org/docs/
 

Autor: Baitronic, Datum: 21.03.2004