.htaccess Verzeichnisschutz für Profis
In den letzten Wochen habe ich sehr oft mit der .htaccess Datei für diverse Webprojekte zu tun. Dabei gab es teils recht unterschiedliche Anforderungen, alle mussten aber in eben jener Datei abgebildet werden. Ich zeige euch wie man einen Verzeichnisschutz für alle Unterverzeichnisse oder nur ein bestimmten Ordner einrichtet, wie man die Zugriffskontrolle auf IP Adressen einschränkt oder diese ausnimmt und wie man diese für Rewrite Pfade konfiguriert.
.htaccess Verzeichnisschutz für Profis
Die .htaccess Datei ist ein Konfigurationsdatei, mit der man die Standard Webserverkonfiguration für die eigenen Projekte in der Ordnerhierarchie anpassen und verändern kann. Vorraussetzung ist ein kompatibler Webserver wie zum Beispiel ein Apache.
Verzeichnisschutz
Mit einem Verzeichnisschutz kann man einen Ordner oder die ganze root URL vor unberechtigten Zugriff schützen. Anwendungsfälle sind:
- einen Entwicklungsserver vor Bots und neugierigen Kunden verbergen
- Logins / Backend Zugänge die über eine separate Datei eines Unterordners funktionieren schützen (z.B. wp-admin bei WordPress)
- Zugriff auf Dateien in Ordner komplett verbieten (z. B. für Logs, Programmcode, …)
Diese Zugriffsbeschränkung wird folgendermaßen eingestellt:
AuthType Basic AuthName "Admin Schutz" AuthUserFile /path/to/directory/.htpasswd Require valid-user
In dem Beispiel betrifft der Verzeichnisschutz das komplette Verzeichnis und alle Unterverzeichnisse, sofern diese nicht eine eigene .htaccess Datei besitzen in denen dieser wieder aufgehoben wird. Man kann den Schutz auch nur für eine bestimmte Datei oder ein Verzeichnis setzen. Das Beispiel zeigt wie man das Login von WordPress schützt:
<Files wp-login.php> AuthType Basic AuthName "Admin Schutz" AuthUserFile /path/to/directory/.htpasswd Require valid-user </Files>
Das funktioniert in diesem Fall, da das WordPress Login über ein separates Skript funktioniert.
Verzeichnisschutz für Rewrite Pfade
Ein Spezialfall des Verzeichnisschutz stellen über Rewrite geänderte Pfade dar. Mit dem Rewrite Modul kann man unter Apache eine beliebige URL Struktur erstellen, beispielsweise ist die URL dieses Beitrags im Browser zu sehen, diese entspricht aber nicht unbedingt einem physischen Pfad auf dem Server. Man muss also einen Verzeichnisschutz setzen, obwohl es weder Verzeichnis noch Datei dafür gibt. Geht das überhaupt?
Glücklicherweise weiß .htaccess auch dafür eine Definition. Beim e-Commerce Shopsystem Magento loggt sich der Benutzer über den über das Rewrite Modul erstellten Pfad domain.com/admin ein. Es gibt im Root keinen admin Ordner und auch keine separate admin.php Datei. Wir schützen dieses wie folgt:
SetEnvIf Request_URI ^.*/admin.* require_auth=true AuthType basic AuthName "Admin Schutz" AuthUserFile /path/to/directory/.htpasswd Order Deny,Allow Deny from all Satisfy any Require valid-user Allow from env=!require_auth
Man beachte, dass eine Variable über die Request_URI erstellt. Die require_auth Variable ist immer dann true, wenn man /admin aufruft. Über die Allow from Bedingung wird für alle /admin URLs der Verzeichnisschutz gesetzt.
IP Adressen Zugang gewähren
Ein Verzeichnisschutz ist eine tolle Sache. Dieser wird aber mühsam, wenn man sich mehrmals täglich einloggen muss oder noch schlimmer über automatische Systeme auf die Seite zugreifen muss (man denke an Schnittstellen wie SOAP). Für diesen Fall kann man den Verzeichnisschutz für bestimmte IP Adressen oder IP Adressbereiche deaktivieren, also den Zugriff erlauben. Das funktioniert wie folgt:
Order Deny,Allow Deny from All AuthType Basic AuthName "Admin Schutz" AuthUserFile /path/to/directory/.htpasswd Require valid-user Allow from 63.219.30.130
In diesem Fall würde für die IP Adresse 63.219.30.130 nie eine Abfrage des Verzeichnisschutzes gemacht werden.
Fazit
Für einen Webentwickler oder Webprogrammierer ist es oft wichtig sich auch mit Administration des Servers zu beschäftigen. Die .htaccess Datei ist dabei eine Schnittstelle um die Konfiguration des Webservers anzupassen. Man kann damit beispielsweise mit dem Verzeichnisschutz bereits sehr viele unterschiedliche Dinge tun, die teilweise auch recht komplex sind.
Welche speziellen .htaccess Verzeichnisschutz habt ihr so verwendet?
Wie sieht es mit Nginx aus? Wäre nur fair das auch zu beschreiben.
MfG
OUE
gute Idee, werde ich mir ansehen!
Gibt’s auch eine Möglichkeit ein Allow auf z.B. eine MAC-Adresse zu beschränken?
So das ein Bestimmtes Gerät z.B. ein Handy egal welche IP es grad hat mit seiner MAC aber durch kommt. IMEI wäre auch denkbar, denke aber die ist im Protokoll nicht enthalten.
Google sagt folgendes:
https://stackoverflow.com/questions/5102440/allow-only-specific-mac-addresses-in-htaccess
Es geht leider nicht. In diesem Fall müsste man ein z.B. PHP Skript hinter den Verzeichnisschutz geben, welches auf die MAC Adresse prüft. Unter PHP funktioniert das.