htaccess Password-Protection Tricks
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 .
htaccess
bę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ę.