htaccess Password-Protection Tricks

♦ Posted by Jeff Starr in .htaccess, bezpieczeństwo
Zaktualizowano czerwiec 30 • 2018 * 25 komentarzy

Ostatnio czytelnik zapytał o to, jak chronić hasłem katalog dla każdego określonego adresu IP, jednocześnie umożliwiając otwarty dostęp do wszystkich innych. W moim artykule, głupie sztuczki htaccess, pokazuję, jak zabezpieczyć hasłem katalog dla każdego IP oprócz podanego, ale nie dla odwrotnego przypadku. W tym artykule zademonstruję tę technikę wraz z szeroką gamą innych przydatnych sztuczek zabezpieczających hasłem, w tym kilka z mojego głupiego artykułu o sztuczkach htaccess. Zanim przejdziemy do soczystych rzeczy, przejrzymy kilka podstaw ochrony hasłem HTAccess.

Ochrona hasłem HTAccess działa w sposób kaskadowy

zanim zaczniemy, istnieje kilka rzeczy, które musisz wiedzieć o różnych dyrektywach ochrony hasłem Apache. Po pierwsze, te sztuczki zabezpieczające hasłem odnoszą się do katalogu, w którym są umieszczone. Na przykład, aby zabezpieczyć całą witrynę hasłem, można umieścić jedną z tych sztuczek w dostępnym w Internecie pliku root HTAccess dla witryny. Dyrektywy HTAccess są stosowane w dół struktury katalogów, w sposób kaskadowy, tak, że wszystkie podkatalogi są również chronione.

potrzebujesz dwóch plików do ochrony hasłem: htaccess i htpasswd

drugą rzeczą, którą musisz wiedzieć, jest to, że w większości przypadków istnieją dwie części do dowolnej implementacji ochrony hasłem: plik .htaccess i plik .htpasswd. Plik .htaccessbędzie zawierał dowolną ze słodkich sztuczek podanych w tym artykule, podczas gdy plik. htpasswd będzie zawierał wymaganą nazwę użytkownika i zaszyfrowaną wersję hasła.

istnieje kilka sposobów generowania pliku .htpasswd. Jeśli czujesz się komfortowo z Uniksem, możesz po prostu uruchomić polecenie ” htpasswd„. Na przykład, wpisanie następującego polecenia spowoduje utworzenie działającego pliku hasła w katalogu /home/path/ :

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

umieszczenie pliku hasła nad katalogiem głównym dostępnym w sieci jest dobrym środkiem bezpieczeństwa. Jeśli sprawdzisz plik po jego utworzeniu, jedyną rzeczą, która będzie zawierać, jest linia, która wygląda podobnie do tej:

username:Mx1lbGn.nkP8

zamiast uruchamiać polecenie uniksowe, możesz użyć jednej z 200 000 usług online zapewniających generator haseł online.

niezależnie od tego, jak i gdzie zdecydujesz się utworzyć plik .htpasswd, pamiętaj o jego lokalizacji do użycia w powiązanych plikach HTAccess. I tak, możesz użyć jednego pliku . htpasswd dla wielu plików HTAccess umieszczonych w wielu katalogach.

dowiedz się, której wersji Apache używasz

w każdym z poniższych przykładów dyrektywy są zamknięte w kontenerze <IfModule>. Ma to na celu zapobieganie awarii serwera, jeśli wymagane moduły Apache nie są dostępne lub nie są zainstalowane. Ogólnie rzecz biorąc, wymagane moduły będą obecne, ale sprawdzenie <IfModule> jest dobrym środkiem zapobiegawczym.

wdrażając którąkolwiek z metod ochrony hasłem w tym artykule, upewnij się, że dwukrotnie sprawdzasz, której wersji Apache używasz przed rozpoczęciem. Przykłady w tym artykule zakładają, że używasz Apache 1.3 lub 2.0, ponieważ kontenery <IfModule> sprawdzają obecność modułu mod_auth. Tak więc, jeśli używasz Apache 2.2 (lub lepszego), będziesz chciał zastąpić bieżące kontenery <IfModule> następującymi:

<IfModule mod_authn_file.c></IfModule>

w razie wątpliwości zapytaj swojego hosta, zainstaluj rozszerzenie Firefoksa ShowIP lub przeszukaj panel sterowania serwera. A jeśli po prostu nie wiesz, nie obchodzi cię to lub nie możesz tego rozgryźć, po prostu usuń znaczniki otwierania i zamykania <IfModule> z metody, której chcesz użyć i nazwij ją dobrą. Bez nich, jeśli serwer nie jest wyposażony w wymagany moduł, po prostu zwróci komunikat o błędzie 500, który można łatwo rozwiązać, usuwając dyrektywy haseł.

możesz dostosować dialog w monicie o hasło

ostatnią rzeczą, o której powinieneś wiedzieć, zanim przejdziesz do słodkich sztuczek, jest to, że możesz dostosować komunikat wyświetlany w monicie o hasło, edytując następującą linię w każdym z przykładów w tym artykule:

AuthName "Username and password required"

zmieniając tekst wewnątrz cudzysłowów, możesz użyć dowolnego języka, który chcesz, aby monit o hasło.

więc teraz w tym momencie naszej przygody, jesteśmy gotowi zanurzyć się w kilka soczystych sztuczek ochrony hasłem HTAccess..

Podstawowa ochrona hasłem

aby zabezpieczyć hasłem swoją witrynę lub dowolny katalog, umieść ten kod w powiązanym pliku HTAccess:

# 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>

to jest tak proste, jak to tylko możliwe. Pamiętaj, aby utworzyć plik hasła i określić jego katalog w pierwszej linii. Przejdźmy do czegoś bardziej interesującego.

Open-access dla jednego IP, ochrona hasłem dla wszystkich innych

ta metoda jest świetna podczas rozwoju projektu, gdzie chcesz otwartego dostępu z możliwością zapewnienia innym dostępu za pomocą hasła:

# 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>

umieszczając ten kod w pliku HTAccess katalogu, który chcesz chronić, tylko określony adres IP będzie miał otwarty dostęp; wszyscy inni będą musieli wprowadzić odpowiednią nazwę użytkownika i hasło.

otwarty dostęp wiele adresów IP, ochrona hasłem wszystkich innych

powyższy kod można łatwo zmodyfikować, aby zapewnić wiele adresów IP otwartego dostępu, jednocześnie odmawiając wszystkim innym:

# 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>

możesz dodać tyle adresów IP, ile potrzeba. Ta metoda jest świetna podczas rozwoju projektu, gdzie obowiązują następujące warunki:

  • rozwój projektu pozostaje prywatny dla stałych odwiedzających
  • dostęp może zostać przyznany klientom (lub komukolwiek) poprzez podanie hasła
  • członkowie zespołu programistów mają otwarty dostęp na swoich maszynach

oprócz zapewnienia nieograniczonego dostępu do zespołu, Możesz również pamiętać o niektórych usługach internetowych, włączając następujące dyrektywy (Wstaw powyżej Satisfy Any dyrektywa):

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

otwarty dostęp dla wszystkich z zabezpieczeniem hasłem dla określonych adresów IP

ta metoda jest przydatna w różnych sytuacjach, w tym w przypadkach, w których chcesz zablokować listę złośliwych adresów IP.

# 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>

możesz podać dowolną liczbę adresów IP. Możesz również odmówić z całych bloków IP, odpowiednio obcinając adres. Na przykład, aby zablokować wszystkich pochodzących z adresu IP zaczynającego się od ” 999.888„, dodamy następującą dyrektywę:

Deny from 999.888

aby uzyskać więcej informacji na temat tego, jak to działa, zobacz tę sekcję mojego głupiego artykułu o sztuczkach htaccess.

otwarty dostęp dla wszystkich z zabezpieczeniem hasłem dla określonego numeru CIDR

podobnie jak w poprzedniej metodzie, oto technika wymagająca hasła tylko z wybranego numeru CIDR. Ta metoda jest przydatna do blokowania mega-spamerów, takich jak RIPE, Optinet i innych. Jeśli, na przykład, znajdziesz się dodając wiersz po wierszu dyrektyw Apache Deny dla adresów zaczynających się od tych samych pierwszych kilku numerów, wybierz jedną z nich i spróbuj wyszukać whois. W wynikach whois będzie podana wartość CIDR reprezentująca każdy adres IP powiązany z daną siecią. Tak więc blokowanie przez CIDR jest skutecznym sposobem na wymowne uniemożliwienie wszystkim instancjom IP sprawcy dostępu do twojej witryny. Oto uogólniony przykład blokowania przez 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>

Ochrona hasłem pojedynczego pliku

użyłem tej techniki niezliczoną ilość razy. Aby zabezpieczyć pojedynczy plik hasłem, po prostu dodaj go do pliku HTAccess:

# 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>

tutaj chronimy plik o nazwie „protected.html ” przed dostępem. Plik będzie dostępny tylko po podaniu odpowiedniej nazwy użytkownika i hasła.

Ochrona hasłem wielu plików

aby chronić wiele plików, metoda jest bardzo podobna, tylko tym razem używamy dyrektywy Apache FilesMatch. Dzięki temu możemy wyświetlić dowolną liczbę plików:

# 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>

w tym przykładzie chronimy hasłem dwa pliki, ” protected.html„i”passwords.txt„. Aby dodać więcej, po prostu dołącz więcej instancji „|(filename\.ext)” do listy plików.

Ochrona hasłem wielu typów plików

Dzięki tej metodzie używamy dyrektywy Apache FilesMatch do ochrony hasłem wielu typów plików. Oto przykład:

# 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>

po wdrożeniu kod ten będzie wymagał hasła dostępu do następujących typów plików: .inc, .txt, .log, .dat, .zip, i .rar. Dostosuj do swoich potrzeb.

Ochrona hasłem dla wszystkiego, z wyjątkiem pojedynczego pliku

dzięki Brett Batie za tę potężną technikę umożliwiającą dostęp do pojedynczego pliku, jednocześnie chroniąc hasłem Wszystko inne:

# 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>

po umieszczeniu w katalogu głównym lub dowolnym katalogu nadrzędnym, kod ten zabezpieczy hasłem Wszystko oprócz pliku o nazwie „open-access.html„, który sam może znajdować się w każdym kolejnym katalogu lub podkatalogu.

aby chronić wszystko, jednocześnie umożliwiając dostęp do wielu plików, możemy zamiast tego użyć dyrektywy Apache FilesMatch. Oto przykład umożliwiający dostęp do „open-access-1.html„, „open-access-2.html„, oraz „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>

zauważ, że możemy skonsolidować listę plików w następujący sposób:

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

alternatywnym podejściem do umożliwienia otwartego dostępu do dowolnego pliku lub grupy plików jest zlokalizowanie ich we własnym katalogu z następującymi dyrektywami dodanymi do pliku HTAccess:

Allow from all
satisfy any

owinąć go następnie

jak widać, Apache’ mod_auth funkcjonalność pozwala skonfigurować tylko o konfiguracji ochrony hasłem może trzeba. Od uniemożliwienia dostępu z określonych adresów IP i domen po umożliwienie dostępu tylko dla określonych plików i katalogów, Apache umożliwia łatwą i bezpieczną ochronę plików. Nie mamy nawet wielu dostępnych możliwości konfigurowania autoryzacji określonych użytkowników i grup. Myślę, że zostawię to na inny artykuł. W międzyczasie, aby uzyskać więcej informacji na temat potężnego Apache mod_auth, sprawdź oficjalną dokumentację.

Jeff Starr

o autorze
Jeff Starr = Web Developer. Specjalista Ds. Bezpieczeństwa. WordPress Buff.