HTAccess Passwort-Schutz Tricks

♦ Geschrieben von Jeff Starr in .htaccess, Sicherheit
Aktualisiert Juni 30, 2018 • 25 Bemerkungen

Kürzlich fragte ein Leser, wie man ein Verzeichnis für jede angegebene IP mit einem Passwort schützt und gleichzeitig allen anderen den offenen Zugriff ermöglicht. In meinem Artikel, Stupid htaccess Tricks, zeige ich, wie man ein Verzeichnis für jede IP außer der angegebenen mit einem Passwort schützt, aber nicht für den umgekehrten Fall. In diesem Artikel werde ich diese Technik zusammen mit einer Vielzahl anderer nützlicher Tricks zum Passwortschutz demonstrieren, darunter einige aus meinem dummen htaccess-Tricks-Artikel. Bevor wir uns mit den saftigen Dingen befassen, werden wir einige Grundlagen des HTAccess-Passwortschutzes überprüfen.

HTAccess-Passwortschutz funktioniert kaskadierend

Bevor wir beginnen, gibt es einige Dinge, die Sie über die verschiedenen Passwortschutzrichtlinien von Apache wissen müssen. Erstens gelten diese Kennwortschutztricks für das Verzeichnis, in dem sie abgelegt werden. Um beispielsweise Ihre gesamte Site mit einem Kennwort zu schützen, platzieren Sie einen dieser Tricks in der für das Web zugänglichen Root-HTAccess-Datei für Ihre Site. HTAccess-Direktiven werden in der Verzeichnisstruktur kaskadierend angewendet, sodass auch alle Unterverzeichnisse geschützt sind.

Sie benötigen zwei Dateien für den Kennwortschutz: htaccess und htpasswd

Das zweite, was Sie wissen müssen, ist, dass in den meisten Fällen jede Kennwortschutzimplementierung aus zwei Teilen besteht: der .htaccess Datei und der .htpasswd Datei. Die .htaccess -Datei enthält einen der in diesem Artikel enthaltenen süßen Tricks, während die .htpasswd -Datei den erforderlichen Benutzernamen und eine verschlüsselte Version Ihres Kennworts enthält.

Es gibt verschiedene Möglichkeiten, Ihre .htpasswd -Datei zu generieren. Wenn Sie mit Unix vertraut sind, können Sie einfach den Befehl „htpasswd“ ausführen. Wenn Sie beispielsweise den folgenden Befehl eingeben, wird eine funktionierende Kennwortdatei im Verzeichnis /home/path/ erstellt:

htpasswd -bc /home/path/.htpasswd username password

Das Platzieren der Kennwortdatei über dem für das Web zugänglichen Stammverzeichnis ist eine gute Sicherheitsmaßnahme. Wenn Sie die Datei nach dem Erstellen untersuchen, enthält sie nur eine Zeile, die folgendermaßen aussieht:

username:Mx1lbGn.nkP8

Anstatt einen Unix-Befehl auszuführen, können Sie es vorziehen, einen der 200.000 Online-Dienste zu verwenden, die einen Online-Passwortgenerator bereitstellen.

Unabhängig davon, wie oder wo Sie Ihre .htpasswd -Datei erstellen möchten, behalten Sie den Speicherort für die Verwendung in den zugehörigen HTAccess-Dateien im Auge. Und ja, Sie können eine .htpasswd -Datei für mehrere HTAccess-Dateien verwenden, die in mehreren Verzeichnissen abgelegt sind.

Wissen, welche Version von Apache Sie verwenden

In jedem der folgenden Beispiele sind die Anweisungen in einem <IfModule> -Container eingeschlossen. Dies soll verhindern, dass Ihr Server abstürzt, wenn die erforderlichen Apache-Module nicht verfügbar oder nicht installiert sind. Im Allgemeinen sind die erforderlichen Module vorhanden, aber die Prüfung <IfModule> ist eine gute Vorsichtsmaßnahme.

Wenn Sie eine der Kennwortschutzmethoden in diesem Artikel implementieren, stellen Sie sicher, dass Sie überprüfen, welche Version von Apache Sie verwenden, bevor Sie beginnen. In den Beispielen in diesem Artikel wird davon ausgegangen, dass Sie entweder Apache 1.3 oder 2.0 verwenden, da die <IfModule> -Container auf das Vorhandensein des mod_auth -Moduls prüfen. Wenn Sie also Apache 2.2 (oder besser) ausführen, sollten Sie die aktuellen <IfModule> -Container durch die folgenden ersetzen:

<IfModule mod_authn_file.c></IfModule>

Wenn Sie Zweifel haben, fragen Sie Ihren Host, installieren Sie die ShowIP Firefox-Erweiterung oder stöbern Sie in der Systemsteuerung Ihres Servers. Und wenn Sie es einfach nicht wissen, sich nicht darum kümmern oder es nicht herausfinden können, entfernen Sie einfach die öffnenden und schließenden <IfModule> -Tags aus der Methode, die Sie verwenden möchten, und nennen Sie sie gut. Wenn Ihr Server ohne sie nicht mit dem erforderlichen Modul ausgestattet ist, wird einfach eine 500-Fehlermeldung zurückgegeben, die leicht durch Entfernen der Kennwortanweisungen behoben werden kann.

Sie können den Dialog auf der Passwortabfrage anpassen

Das Letzte, was Sie wissen sollten, bevor Sie in einige süße Tricks eintauchen, ist, dass Sie die auf der Passwortabfrage angezeigte Nachricht anpassen können, indem Sie die folgende Zeile in jedem der Beispiele in diesem Artikel bearbeiten:

AuthName "Username and password required"

Wenn Sie den Text in den Anführungszeichen ändern, können Sie eine beliebige Sprache für die Passwortabfrage verwenden.

Jetzt, an diesem Punkt unseres Abenteuers, sind wir bereit, in einige saftige HTAccess-Passwortschutz-Tricks einzutauchen..

Grundlegender Kennwortschutz

Um Ihre Site oder ein beliebiges Verzeichnis mit einem Kennwort zu schützen, platzieren Sie diesen Code in der zugehörigen HTAccess-Datei:

# basic password protection<IfModule mod_auth.c> AuthUserFile /home/path/.htpasswd AuthName "Username and password required" AuthType Basic <Limit GET POST> Require valid-user </Limit></IfModule>

Das ist ungefähr so einfach wie es nur geht. Denken Sie daran, Ihre Passwortdatei zu erstellen und ihr Verzeichnis in der ersten Zeile anzugeben. Kommen wir zu etwas Interessanterem.

Open-Access für eine IP, Passwortschutz für alle anderen

Diese Methode eignet sich hervorragend für die Projektentwicklung, bei der Sie Open Access mit der Möglichkeit wünschen, anderen Zugriff über ein Passwort zu gewähren:

# password protect excluding specific ip<IfModule mod_auth.c> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd AuthType Basic Require valid-user Order Deny,Allow Deny from all Allow from 111.222.333.444 Satisfy Any</IfModule>

Indem Sie diesen Code in die HTAccess-Datei des Verzeichnisses einfügen, das Sie schützen möchten, wird nur der angegebenen IP-Adresse der offene Zugriff gewährt.

Open Access mehrere IPs, Passwort-Schutz für alle anderen

Der obige Code kann leicht modifiziert werden, um mehrere IPs Open Access bereitzustellen, während alle anderen verweigert werden:

# password protect excluding specific ips<IfModule mod_auth.c> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd AuthType Basic Require valid-user Order Deny,Allow Deny from all Allow from localhost Allow from 111.222.333.444 Allow from 555.666.777.888 Satisfy Any</IfModule>

Sie können beliebig viele IPs hinzufügen. Diese Methode eignet sich hervorragend während der Projektentwicklung, wo die folgenden Bedingungen gelten:

  • Die Projektentwicklung bleibt für regelmäßige Besucher privat
  • Der Zugriff kann Kunden (oder anderen Personen) durch Angabe des Passworts gewährt werden
  • Mitglieder des Entwicklungsteams haben auf ihren jeweiligen Computern freien Zugriff

Neben dem uneingeschränkten Zugriff auf Ihr Team möchten Sie möglicherweise auch bestimmte Webdienste berücksichtigen, indem Sie die folgenden Anweisungen einfügen (über dem Satisfy Any Richtlinie):

Allow from validator.w3.org
Allow from jigsaw.w3.org
Allow from google.com

Offener Zugriff für alle mit Kennwortschutz für bestimmte IPs

Diese Methode ist für eine Vielzahl von Situationen nützlich, einschließlich Fällen, in denen Sie eine Liste böswilliger IPs blockieren möchten.

# password protect only for specified ips<IfModule mod_auth.c> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd AuthType Basic Require valid-user Order Allow,Deny Allow from all Deny from 111.222.333.444 Deny from 555.666.777.888 Satisfy Any</IfModule>

Sie können beliebig viele IP-Adressen auflisten. Sie können auch ganze IP-Blöcke ablehnen, indem Sie die Adresse entsprechend abschneiden. Um beispielsweise alle zu blockieren, die von einer IP-Adresse kommen, die mit „999.888“ beginnt, würden wir die folgende Direktive hinzufügen:

Deny from 999.888

Weitere Informationen dazu, wie das funktioniert, finden Sie in diesem Abschnitt meines Dumm htaccess Tricks Artikel.

Open Access für alle mit Passwortschutz für bestimmte CIDR-Nummer

Ähnlich wie bei der vorherigen Methode ist hier eine Technik zum Anfordern eines Passworts nur von einer ausgewählten CIDR-Nummer. Diese Methode ist nützlich, um Mega-Spammer wie RIPE, Optinet und andere zu blockieren. Wenn Sie beispielsweise Zeile für Zeile Apache Deny -Anweisungen für Adressen hinzufügen, die mit denselben ersten Zahlen beginnen, wählen Sie eine davon aus und versuchen Sie eine WHOIS-Suche. In den WHOIS-Ergebnissen wird der CIDR-Wert aufgeführt, der jede IP-Adresse darstellt, die diesem bestimmten Netzwerk zugeordnet ist. Daher ist das Blockieren über CIDR eine effektive Möglichkeit, eloquent zu verhindern, dass alle IP-Instanzen des Täters auf Ihre Site zugreifen. Hier ist ein verallgemeinertes Beispiel für das Blockieren durch CIDR:

# password protect only for specified CIDR<IfModule mod_auth.c> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd AuthType Basic Require valid-user Order Allow,Deny Allow from all Deny from 10.1.0.0/16 Deny from 80.0.0/8 Satisfy Any</IfModule>

Passwort schützen Sie eine einzelne Datei

Ich habe diese Technik unzählige Male verwendet. Um eine einzelne Datei mit einem Passwort zu schützen, fügen Sie diese einfach zu Ihrer HTAccess-Datei hinzu:

# password protect single file<IfModule mod_auth.c> <Files "protected.html"> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd Require valid-user AuthType Basic </Files></IfModule>

Hier schützen wir eine Datei mit dem Namen „protected.html“ vor dem Zugriff. Die Datei ist erst nach Eingabe des richtigen Benutzernamens und Passworts verfügbar.

Passwort schützen mehrere Dateien

Um mehrere Dateien zu schützen, ist die Methode sehr ähnlich, nur dieses Mal verwenden wir Apaches FilesMatch Direktive. Dies ermöglicht es uns, so viele Dateien wie nötig aufzulisten:

# password protect mulitple files<IfModule mod_auth.c> <FilesMatch "(protected\.html)|(passwords\.txt)"> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd Require valid-user AuthType Basic </FilesMatch></IfModule>

In diesem Beispiel schützen wir zwei Dateien mit einem Kennwort, „protected.html“ und „passwords.txt„. Um weitere hinzuzufügen, fügen Sie einfach weitere Instanzen von „|(filename\.ext)“ in die Liste der Dateien ein.

Kennwortschutz für mehrere Dateitypen

Mit dieser Methode verwenden wir die FilesMatch -Direktive von Apache, um mehrere Dateitypen mit einem Kennwort zu schützen. Hier ein Beispiel:

# password protect mulitple file types<IfModule mod_auth.c> <FilesMatch "\.(inc|txt|log|dat|zip|rar)$"> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd Require valid-user AuthType Basic </FilesMatch></IfModule>

Sobald dieser Code vorhanden ist, ist ein Kennwort für den Zugriff auf die folgenden Dateitypen erforderlich: .inc, .txt, .log, .dat, .zip, und .rar. Passen Sie an Ihre Bedürfnisse anpassen.

Passwortschutz für alles außer einer einzelnen Datei

Vielen Dank an Brett Batie für diese leistungsstarke Technik, um den Zugriff auf eine einzelne Datei zu ermöglichen und gleichzeitig alles andere mit einem Passwort zu schützen:

# password protect everything except a single file<IfModule mod_auth.c> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd Require valid-user AuthType Basic <Files "open-access.html"> Order Deny,Allow Deny from all Allow from 123.456.789 Satisfy any </Files></IfModule>

Wenn dieser Code im Stammverzeichnis oder in einem übergeordneten Verzeichnis abgelegt wird, schützt er alles außer der Datei mit dem Namen „open-access.html„, die sich selbst in einem beliebigen nachfolgenden Verzeichnis oder Unterverzeichnis befinden kann.

Um alles zu schützen und gleichzeitig den Zugriff auf mehrere Dateien zu ermöglichen, können wir stattdessen die FilesMatch -Direktive von Apache verwenden. Hier ist ein Beispiel für den Zugriff auf „open-access-1.html„, „open-access-2.html„, und „open-access-3.html„:

# password protect everything except specified files<IfModule mod_auth.c> AuthName "Username and password required" AuthUserFile /home/path/.htpasswd Require valid-user AuthType Basic <FilesMatch "(open-access-1.html)|(open-access-2.html)|(open-access-3.html)"> Order Deny,Allow Deny from all Allow from 123.456.789 Satisfy any </FilesMatch></IfModule>

Beachten Sie, dass wir die Dateiliste wie folgt konsolidieren können:

<FilesMatch "open-access-\.html">

Ein alternativer Ansatz, um den offenen Zugriff auf Dateien oder Dateigruppen zu ermöglichen, besteht darin, sie in einem eigenen Verzeichnis zu suchen, wobei die folgenden Anweisungen zur HTAccess-Datei hinzugefügt werden:

Allow from all
satisfy any

Wickeln Sie es dann ein

Wie Sie sehen können, ermöglicht die mod_auth -Funktionalität von Apache die Konfiguration von Passwortschutzeinstellungen, die Sie möglicherweise benötigen. Vom Verhindern des Zugriffs von bestimmten IP-Adressen und Domänen bis hin zum Zulassen des Zugriffs nur für bestimmte Dateien und Verzeichnisse ermöglicht Apache den einfachen und sicheren Schutz Ihrer Dateien. Und wir sind noch nicht einmal auf die vielen Möglichkeiten eingegangen, bestimmte Benutzer- und Gruppenberechtigungen zu konfigurieren. Ich denke, ich werde das für einen anderen Artikel speichern. In der Zwischenzeit finden Sie weitere Informationen zu Apaches leistungsfähigem mod_auth in der offiziellen Dokumentation.

Jeff Starr

Über den Autor
Jeff Starr = Webentwickler. Sicherheitsspezialist. In: WordPress Buff.