Passwort und Schutz
Möchte ich eine Datei oder einen Ordner auf dem Server nicht der Öffentlichkeit zugänglich machen, dann kann ich einen Passwortschutz einrichten, welcher ebenfalls durch die .htaccess-Datei gesteuert wird. Auch Spamm-Roboter und Spiders kommen nicht rein.
Passwort für Ordner
Dateien welche mit .ht beginnen werden schon per Grundeinstellung vom System auf keinem Browser angezeigt.
Wie kann ich verhindern, dass die Inhalte von Dateien in einem bestimmten Ordner durch den Browser angezeigt werden können?
Der Hoster stellt oft ein User-Interface zur Verfügung, welches die Einrichtung eines Passwortschutzes erleichtert, aber ich kann das auch von Hand einrichten, wenn der Hoster es erlaubt.
Zwei .ht-Dateien sind nötig: die .htaccess in welcher wir die Einschränkungen definieren und den Pfad zur Datei .htusers angeben, in welcher dann die verschlüsselten Passworte liegen.
Der zu schützende Ordner soll 'lehrling' heissen, einen solchen lege ich also an.
In den zu schützenden Ordner kommt eine reine Script-Datei (also Text ohne Formatierungen) mit dem Namen .htaccess (vor dem Punkt steht nichts).
In die Datei schreibe ich folgendes:
# .htaccess-Datei für den lehrling-Ordner AuthType Basic AuthName "Lehrling Bereich" AuthUserFile /home/ordner/ordner/lehrling/.htusers require user lehrling
AuthType Basic
- #: ist ein Kommentar
- AuthType Basic: Zugangsdaten werden unverschlüsselt vom Browser an den Server geschickt
- AuthName: ein frei wählbarer Name angegeben, welcher dann auf der Passwortabfrage erscheint.
- require user: gibt zulässige Benutzernahmen an (mehrere werden durch Leerschläge getrennt).
- AuthUserFile: gibt den absoluten Pfad (von zuoberst auf dem Server) bis zu der Datei an, welche die Passworte den Benutzernamen zuordnet.
Jene Datei liegt in diesem Beispiel auch im Ordner 'lehrling' und heisst .htusers - ich könnte sie aber ebensogut .htpasswd genannt haben (falls ich dies in der Pfadangabe so vorgesehen hatte).
AuthType Digest
AuthType Digest: Zugangsdaten werden nun verschlüsselt vom Browser an den Server geschickt, ältere Browser (IE 6) können das nicht.
.htusers oder .htpasswd
Bevor wir die Passworte zuteilen können müssen wir sie verschlüsseln. Dies geschieht beispielsweise durch ein Freeware-Programm namens 'Easy .htaccess Generator' oder via einer Website http://www.webmaster-elite.de/online-tools/htaccess-generator.html oder http://www.easyseo.de/tools/htaccess-generator/ wo das gewünschte Passwort in ein Formularfeld eingetragen wird, das es dann verschlüsselt ausgibt. Zum Beispiel "lehrling" wird zu "UZgrINpxr9DEQ". Dieser verschlüsselte Wirrwarr wird nun in die .htusers-Datei übertragen, wobei das unverschlüsselte Passwort natürlich nicht vergessen werden darf. Das Script sieht so aus:
# .htusers-Datei für den lehrling-Ordner Benutzername:Wirrwarr lehrling:UZgrINpxr9DEQ zweiterbenutzername:wirrwarr undsoweiter:wirrwarr
Es folgt der Übertrag via FTP des Ordners (lehrling) mit beiden Dateien (.htaccess + .htusers) und allen zu schützenden Dateien und Unterordner. Will ein Surfer mit einem Browser auf eine Datei oder einen Ordener im Ordner 'lehrling' zugreiffen, erscheint eine Passwortabfrage, welche gegebenen Falls den Zugriff erlaubt oder verhindert. In meinem Fall also war der Ordnername 'lehrling', der Benutzername 'lehrling' und das Passwort ebenfalls 'lehrling'.
- gibt der Benutzer im Browser als Adresse nur den Ordnernamen "lehrling" ein, erhält er nur Zugang, wenn eine index.htm Datei im entsprechenden Ordner vorhanden ist. Andernfalls wird der Zugang verweigert, auch wenn Benutzername wie Passwort richtig waren, damit wird verhindert, dass der Ordner durchsucht werden kann und alle Dateien aufgelistet werden. Existiert also keine index.htm Datei (oder index.html, default.htm, etc.) im Ordner, muss eine existierende Datei direkt angesprochen werden!
Zugang für Gruppen
.htgroups
- Es lassen sich auch ganze Gruppen definieren in denen verschiedene Benutzernamen zusammengefasst werden.
Dies in einer .htgroups -Datei (steht zum Beispiel affenhorde:Biefer Hansheiri Seppli) welche auch in der .htaccess Datei referenziert werden muss:
# .htaccess-Datei für den lehrling-Ordner AuthType Basic AuthName "Sicherheits Bereich - bitte geben Sie Ihre Zugangsdaten ein:" AuthUserFile /ordner/ordner/lehrling/.htusers AuthGroupFile /ordner/ordner/lehrling/.htgroups require user Hansheiri Seppli Liselotte require group affenhorde
.htsave
- Der Ordner, welcher diese Referenzdateien enthält muss nicht der zu schützende Ordner sein; ein Ordner mit einem Punkt am Anfang wie .htsave würde auch in keinem Browser angezeigt.
- Es lassen sich auch nur einzelne Datei-Typen schützen, bzw. für einzelne Users Zugriffsberechtigungen erteilen, dies in der .htaccess -Datei bei 'Files'.
# .htaccess-Datei - jpg-Dateien im lehrling-Ordner schützen AuthType Basic AuthName "Lehrling Bereich" AuthUserFile /lehrling/.htusers <Files *.jpg> require user Liselotte </Files>
Zugang für eine IP
Satisfy Any
Mir als Webmaster mit einer festen IP-Adresse, kann ich unkonntrollierten Zutritt verschaffen.
# .htaccess-Datei - lässt IP 123.123.123.14 durch AuthType Basic AuthName "Webmaster Bereich" AuthUserFile /lehrling/.htusers Require valid-user Allow from 123.123.123.14 Satisfy Any
Und dummen Hackern oder Bots mit einer festen IP-Adresse, kann ich den Zutritt verwehren.
Order allow,deny Allow from all Deny from 205.134.172.1
Zugriff auf Datei-Typen verbieten
Passworte, die in PHP-Dateien als Variablen hinterlegt wurden, werden ja sowieso nicht dargestellt. Also, wenn ich den Dateinamen einer PHP-Datei kenne, und im Browser aufrufe, sehe ich nichts als eine weisse, geparste Seite.
Der Zugriff von aussen her kann auch generell verboten werden (ich erteile dann keine Berechtigung durch eine Passwortabfrage). Der Zugriff von innen her (für die Scripte) bleibt dabei erhalten.
Zugangsdaten in .inc Dateien abgelegt (passwort.inc), sollen nicht in ungeschützten Verzeichnissen liegen! Errät man die Namen, kann die Datei einfach im Browser aufgerufen werden. Durch .htaccess-Dateien in Ordnern für Passworte und Zugangsdaten, die zudem noch speziel benannt werden (kannstelangeratenordnername), kann der Zugriff auf diese Dateien von Aussen verboten werden.
Order deny,allow
Order deny,allow oder Order allow,deny legt die Reihenfolge der Bearbeitung der folgenden Anweisungen fest.
Ich kann erst alles verbieten (deny) und dann ein paar Ausnahmen erlauben (allow), oder erst alles erlauben und dann ein paar Ausnahmen verbieten.
<FilesMatch "\.inc$"> Order deny,allow Deny from all </FilesMatch>
Weitere Dateiendungen schützen, z.B. auch noch .dat:
<FilesMatch "\.(inc|dat)$"> Deny from all </FilesMatch>
Weil eben auch regex benutzt werden können sind auch Expressions vor dem Punkt kontrollierbar.
<FilesMatch "^(dateinamen\.inc)$"> Order allow,deny Deny from all </FilesMatch>
Und die .htaccess Datei selbst.
<Files .htaccess> order allow,deny deny from all </Files>
Dateien nicht Indexieren
Options All
Wie kann ich verhindern, dass Dateien in einem bestimmten Ordner durch den Browser indexiert werden?
Falls in einem Ordner keine Standart-Index-Datei (z.B. index.php oder index.html) vorhanden ist und der Ordner im Browser aufgerufen wird,
erstellt der Server ein Inhaltsverzeichnis, eine Auflistung sämtlicher Files im Ordner.
- Auflistung allgemein verbieten:
Options All -Indexes - Das Gegenteil, den Zugriff auf das Webverzeichnis aktivieren:
Options All +Indexes - Einzelne Datei-Typen von der Auflistung ausschliessen:
IndexIgnore *.mp3 *.avi - Standard-Index-Datei bestimmen:
DirectoryIndex home.php
Mehr zum Thema Sicherheit