Auf Webservern die mit Apache laufen ist es möglich soferne der Administrator dies in der Hauptkonfiguration gestattet einige Dinge selbst zu konfigurieren in dem eine Datei mit dem Namen ".htaccess" mit diversen Einstellungen angelegt wird welche gleichzeitig auch für alle Unterordner gilt soferne sich darin nicht eine eigene befindet welche die Werte überschreibt
Dieser Beitrag erhebt keinerlei Anspruch auf vollständigkeit da die Möglichkeiten nahezu unbegrenzt sind und am ausführlichsten in der leider nur englisch verfügbaren Dokumentation zum
Apache aufgeführt sind welche auch als PDF-Datei heruntergeladen werden kann
Unter Windows ist es das grösste Problem eine solche Datei anzulegen da der Explorer dies verweigert weil es für ihn eine Dateiendung ohne Namen (Unter Linux durchaus üblich) ist wodurch man gezwungen wird eine leere Textdatei zu Erstellen und diese mit einem anderen Programm z.B. Windows Commander danach umzubenennen order mit einem Editor eines Fremdherstellers arbeitet
Dies ist wohl einer der interessantesten Aspekte da es ganz einfach machbar ist anstelle der abschreckenden weissen "Seite nicht gefunden" Ausgabe eigene, optisch zur Seite passende Fehlerausgaben mit Grafiken und Links und allem was einem sonst noch einfällt ausgeben zu lassen
Wichtig in diesem Zusammenhang ist nur absolute Pfade für Links und Grafiken anzugeben also am besten mit einem / beginnend zum Server-Root damit das Ganze auch lokal funktioniert
ErrorDocument 404 /error_404.htm
Wie man am Beispiel sieht ist es damit möglich für die verschiedenen Fehlertypen eigene Seiten zu definieren oder man nutzt wenn verfügbar die Skriptsprache PHP wobei in diesem Zusammenhang wichtige Informationen in einem eigenen PHP-Special zu finden sind
Wichtig ist in diesem Zusammenhang die Fehlernummer 401 (Nicht authorisiert) nicht umzuleiten da sonst die am Ende bschriebene Zugriffs-Sicherung nicht funktioniert wie ich bei der Erstellung dieses Artikels am eigenen Leib schmerzhaft feststellen musste !
Normalerweise muss die Startseite index.htm bzw. index.php heissen und ist vom Server vorgegeben und damit auch die Reihenfolge sollte es beide geben was sich leicht den eigenen Bedürfnissen anpassen lässt
DirectoryIndex index.php index.htm index.wml
Gibt der Besucher nur einen Ordner innerhalb der Homepage ohne Datei an so erhält er eine Auflistung des Inhaltes was in vielen Fällen nicht erwünscht oder zumindest optisch nicht schön ist
Mit der folgenden Direktive wird dies untersagt und endet in einem "Zugriff verweigert" wobei hier das Minuszeichen ausschlaggebend ist, um dies für einzelne Unterordner trotzdem zu erlauben einfach dort eine eigene .htaccess plazieren und anstelle des Minus ein + verwenden
Options -Indexes
In der Regel müssen Dateien wie PHP und CGI-Skripts auf vielen Servern in einem bestimmten Ordner liegen von dem sie ausgeführt werden können (meist /cgi-bin) was sich jedoch für den eigenen Bereich ändern lässt soferne dies durch den Betreiber ernöglicht wurde
Für CGI/PHP
Options +ExecCGI
Für Server-Side-Includes (SSI)
Options +IncludesNOEXEC
Meist werden nur Dateien mit den Endungen php, php3 und phtml vom Interpreter berücksichtigt wobei es auch hier kein Problem ist dies selbst zu Ändern um z.B. auch normale HTML-Dateien zu parsen was aber die Homepage langsamer macht und den Server stärker belastet
AddType application/x-httpd-php .php .ini .txt .dat
Über die AddHandler-Direktve ist das selbe auch für CGI-Scripts wie im folgenden Beispiel für beliebige Endungen möglich
AddHandler cgi-script .cgi
MIME-Types dienen dazu dem Client mitzuteilen um was für eine Art Inhalt (Text, Binärdatei, Grafik ...) es sich beim empfangenen Dokument handelt damit dieser entsprechend reagieren kann
In diesem Beispiel werden den für WAP-Seiten üblichen Endungen die korrekten Inhaltstypen zugewiesen da sonst auch bei völlig korrektem Quellcode das Mobiltelefon nur eine hilflose Fehlermeldung ausgibt - Meiner bescheidenen Meinung nach eine Frechheit der Gerätehersteller aber bitte schön muss man sich wie so oft selber helfen
AddType text/vnd.wap.wml .wml .wap
AddType image/vnd.wap.wbmp .wbmp
AddType text/vnd.wap.wmlscript .wmls
AddType application/vnd.wap.wmlc .wmlc
AddType application/vnd.wap.wmlscriptc .wmlsc
Interessant vor allem im deutschen Raum da ansonsten entweder Umlaute von manchen Browsern falsch dargestellt werden oder in jeder Datei eine Meta-Angabe vorhanden sein sollte
AddLanguage de .htm .html .php .cgi
AddCharset ISO-8859-1 .htm .html .php .cgi
Ist die Anzege von Ordnerinhalten erlaubt lässt sich die optisch weitgehend anpassen und Beschreibungen sowie Dateisymbole festlegen wobei dies durch die erste Zeile des Beispiels explizit aktiviert wird
IndexOptions FancyIndexing
AddDescription "HTML-Datei, anzeigbar" *.htm *.html
AddDescription "GIF-Grafik, anzeigbar" *.gif
AddDescription "ZIP-Archiv, downloadbar" *.zip
AddIcon /src/blau.gif html htm
AddIcon /src/gelb.gif gif jpg
AddIcon /src/gruen.gif ^^DIRECTORY^^
IndexIgnore kopf.htm fuss.htm
Legt fest das die angegebenen Dateien nicht angeziegt werden dürfen
SuppressColumnSorting aktiviert unsortierte Anzeige
SuppressDescription deaktivert Kurzbeschreibungen
SuppressLastModified deaktiviert Zeitstempel
SuppressSize deaktiviert Dateigrössen angezeigt
ReadmeName
Bestimmt eine Datei mit zusätzlichen Informationen undwird unterhalb der Verzeichnisliste eingebunden.
Bei Angeboten die nur über bestimmte PCs mit statischen IP-Adressen erreichbar sein sollen oder um User die sich nicht wie gewünscht verhalten haben auszuschliessen lässt sich dies ebenfalls für bestimmte Ordner oder die ganze Homepage realisieren
Hier ist die Reihenfolge (Order) wichtig um entweder alle bis auf bestimmte zu sperren oder alle zu sperren und nur gewissen Adressen den Zugriff zu erlauben wobei in der IP-Maske auch Teile also z.B. 192.168 für alle Adressen die so beginnen
Order deny,allow
Deny from .aol.com
Deny from 192.168
Allow from 192.168.220.102
Dieser relativ umfangreiche Abschnitt soll erläutern wie man bestimmte Ordner die nicht jeder User einsehen darf mit einem Passwort schützt um z.B. darin administrative Tools standortunabhängig zu installieren
Neben der ".htaccess" sind 2 weitere Dateien nötig um in einer die Gruppen welchen die einzelnen User zugehören zu definieren und in einer weiteren die Passwörter für die User selbst
Im Prinzip reicht es zwar auch nur eine Benutzerdatei zu verwenden und im folgenden alles was mit "group" in Zusammenhang steht wegzulassen wovon ich aber nur abraten kann da wenn viele Personen mit unterschiedlichen Rechten Zugriff auf mehrere Ordner erhalten sollen die Sache sehr unübersichtlich wird und sich nicht zentral verwalten lässt
Die Passwärter selbst müssen auf Unix/Linux-Servern verschlüsselt gespeichert werden wobei der Schlüssel am einfachsten über ein PHP-Skript mit Verwendung des Kommandos crypt() generiert werden kann
Dies funktioniert leider nur unter Unix da Crypt auf Windows anders arbeitet
Die Verschlüsselung selbst funktioniert nur in eine Richtung und kann daher nicht umgangen werden da der Server bei der Authentifizierung das eingegebene Passwort mit der gleichen Methode verschlüsselt und beide Zeichenfolgen abschliessend vergleicht
Wichtig ist hier dass innerhalb der ".htaccess" nur absolute Pfade zu den User- und Gruppendateien erlaubt sind also mit / beginnend vom Root-Ordner welcher nicht die Domain ist sondern der Unix-Pfad (Am besten beim Provider nachfragen) in meinem Fall /home/rhsoftware/www.rhsoft.net/
Zum leichteren Verständniss der folgenden Beispiele sollte einmal das Ziel bekannt sein nämlich kurz gesagt einen beliebigen Ordner nur Für die User "Franz" und "Peter" aus der Gruppe Service zugänglich zu machen
Unter Windows müssen die Passswörter unverschlüssselt gespeichert und ein absoluter unbedingt in Anführungszeichen eingeschlossener Pfad wie z.B. "G:homepagewww.rhsoft.net.htusers" verwendet werden !
Aus den vorangegangenen Beispielen lässt sich zusammenfassend erkennen das primär einmal die ".htaccess" in dem zu schützenden Ordner liegen muss damit der Rest der Homepage auch weiterhin öffentlich verfügbar bleibt
Die Dateien ".htusers" und ".htgroups" werden am besten allgemein im Root-Ordner abgelegt, um wenn verschiedene Ordner mit unterschiedlichen Zugriffsrechten geplant sind die entsprechenden Gruppen und Benutzer zentral verwalten zu können und nur mehr in den gewünschten Ordner anzugeben ist welche User aus welchen Gruppen Zugriff erhalten sollen
Innerhalb der ".htaccess" kann auch eingegrenzt werden auf welche Dateien dieser Schutz anzuwenden ist damit z.B. direkte Links auf Grafiken nicht behindert und nur die sensiblen Daten selbst gesichert werden
Sollen verschiedene Endungen mit unterschiedlichen Rechten versehen werden ist für jede Endung wie im Beispiel ersichtlich ein eigener Files-Block notwendig und ohne Angabe von Usern bzw. der Bezeichnung "valid-user" können damit z.B. einzelne Dateitypen unabhängig vom User für die ganze Gruppe freigegeben werden
<Files *.php>
require user Franz Peter
require group Service
</Files>
<Files *.htm>
require group Service
</Files>
Unter Umständen kommt damit jedoch nicht jeder Server klar
Der Server hier auf Sprit.org erlaubte beim Test nur eine einfache Gruppen- und Userangabe, Apache 2 hat mit der eben genannten Variante keine Probleme gezeigt
Die Datei ".htaccess" selbst muss zwangsweise Leseberechtigungen haben da sie sonst nicht funktioniert soll aber eigentlich nicht für jeden einsehbar sein was auch ggf. für ".htgroups" und ".htusers" gilt
Am besten direkt im Root-Ordner der Domain eine ".htaccess" mit den folgenden Zeilen plazieren womit verhindert wird das sämtliche Dateien der Domain welche mit ".ht" beginnen über den Browser einsehbar sind
Im Beispiel wird dies auch gleich für Dateien mit den Endungen ini und dat erledigt die normalerweise auch eher Daten für interne Zwecke (Skripts) enthalten