htaccess lösenordsskydd Tricks

♦ upplagt av Jeff Starr i .htaccess, säkerhet
uppdaterad Juni 30, 2018 • 25 kommentarer

nyligen en läsare frågade om hur man lösenordsskydda en katalog för varje angiven IP samtidigt som öppen tillgång till alla andra. I min artikel, dumma htaccess-Tricks, visar jag hur man lösenordsskyddar en katalog för varje IP utom den som anges, men inte för omvänd fall. I den här artikeln kommer jag att demonstrera denna teknik tillsammans med ett brett utbud av andra användbara lösenordsskyddstrick, inklusive några från min dumma htaccess-Tricks-artikel. Innan vi går in i de saftiga grejerna granskar vi några grunder för htaccess-lösenordsskydd.

htaccess lösenordsskydd fungerar i cascading mode

innan vi börjar, det finns några saker du behöver veta om Apaches olika lösenordsskyddsdirektiv. För det första gäller dessa lösenordsskyddstrick för katalogen där de placeras. Till exempel, för att lösenordsskydda hela din webbplats, skulle du placera ett av dessa knep i den webbåtkomliga root HTAccess-filen för din webbplats. Htaccess-direktiv tillämpas i katalogstrukturen, på ett kaskad sätt, så att alla underkataloger också skyddas.

du behöver två filer för lösenordsskydd: htaccess och htpasswd

den andra saken du behöver veta är att det i de flesta fall finns två delar till alla lösenordsskyddsimplementeringar: filen .htaccess och filen .htpasswd. Filen .htaccess innehåller något av de söta trick som tillhandahålls i den här artikeln, medan filen .htpasswd innehåller det nödvändiga användarnamnet och en krypterad version av ditt lösenord.

det finns flera sätt att generera din .htpasswd fil. Om du är bekväm med Unix kan du helt enkelt köra kommandot ”htpasswd”. Om du till exempel anger följande kommando skapas en fungerande lösenordsfil i katalogen /home/path/ :

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

att placera lösenordsfilen ovanför den webbåtkomliga rotkatalogen är en bra säkerhetsåtgärd. Om du undersöker filen efter att den har skapats är det enda som den innehåller en rad som liknar den här:

username:Mx1lbGn.nkP8

istället för att köra ett Unix-kommando kanske du föredrar att använda en av de 200 000 onlinetjänsterna som tillhandahåller en online lösenordsgenerator.

oavsett hur eller var du bestämmer dig för att skapa din .htpasswd – fil, behåll platsen i åtanke för användning i dess associerade HTAccess-fil(er). Och ja, du kan använda en. htpasswd fil för flera HTAccess-filer placerade i flera kataloger.

vet vilken version av Apache du använder

i vart och ett av exemplen nedan är direktiven inneslutna i en <IfModule> Behållare. Detta för att förhindra att din server kraschar om de nödvändiga Apache-modulerna inte är tillgängliga eller inte installerade. I allmänhet kommer de nödvändiga modulerna att finnas, men kontrollen <IfModule> är en bra försiktighetsåtgärd.

när du implementerar någon av lösenordsskyddsmetoderna i den här artikeln, se till att du dubbelkontrollerar vilken version av Apache du använder innan du börjar. Exemplen i den här artikeln antar att du använder antingen Apache 1.3 eller 2.0, eftersom <IfModule> – behållarna kontrollerar närvaron av modulen mod_auth. Således, om du kör Apache 2.2( eller bättre), Vill du ersätta de nuvarande <IfModule> – behållarna med följande:

<IfModule mod_authn_file.c></IfModule>

om du är osäker, fråga din värd, installera ShowIP Firefox-tillägget eller gräva runt i serverns kontrollpanel. Och om du bara inte vet, bryr dig inte eller inte kan räkna ut det, ta bara bort öppnings-och stängningstaggarna <IfModule> från den metod du vill använda och kalla det bra. Utan dem, om din server inte är utrustad med den nödvändiga modulen, kommer den helt enkelt att returnera ett 500-felmeddelande, vilket enkelt löses genom att ta bort lösenordsdirektiven.

du kan anpassa dialogen på lösenordsprompten

det sista du bör veta innan du dyker in i några söta knep är att du kan anpassa meddelandet som visas på lösenordsprompten genom att redigera följande rad i vart och ett av exemplen i den här artikeln:

AuthName "Username and password required"

genom att ändra texten inuti citaten kan du använda vilket språk du vill för lösenordsprompten.

så nu på denna punkt i vårt äventyr, vi är redo att dyka in i några saftiga htaccess lösenordsskydd tricks..

grundläggande lösenordsskydd

för att lösenordsskydda din webbplats eller någon katalog, placera den här koden i den tillhörande htaccess-filen:

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

det är ungefär så grundläggande som det blir. Kom ihåg att skapa din lösenordsfil och ange dess katalog i första raden. Låt oss gå vidare till något mer intressant.

öppen åtkomst för en IP, lösenordsskydda alla andra

denna metod är bra under projektutveckling, där du vill ha öppen åtkomst med möjlighet att ge andra åtkomst via lösenord:

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

genom att placera den koden i htaccess-filen i katalogen som du vill skydda får endast den angivna IP-adressen öppen åtkomst.alla andra måste ange rätt användarnamn och lösenord.

Open access flera IP-adresser, lösenordsskydda alla andra

ovanstående kod kan ändras enkelt för att ge flera IP-adresser öppen åtkomst medan du nekar alla andra:

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

du kan lägga till så många IP-adresser som behövs. Denna metod är utmärkt under projektutveckling, där följande villkor kommer att gälla:

  • projektutveckling förblir privat för vanliga besökare
  • åtkomst kan beviljas kunder (eller någon) genom att ange lösenordet
  • medlemmar i utvecklingsteamet har öppen åtkomst på sina respektive maskiner

förutom att ge obegränsad åtkomst till ditt team kanske du också vill ha vissa webbtjänster i åtanke genom att inkludera följande direktiv (infoga ovanför Satisfy Any direktiv):

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

öppen åtkomst för alla med lösenordsskydd för specifika IP-adresser

den här metoden är användbar för en mängd olika situationer, inklusive fall där du vill blockera en lista med skadliga IP-adresser.

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

du kan lista så många IP-adresser som behövs. Du kan också neka från hela IP-block genom att trunkera adressen i enlighet därmed. Till exempel, för att blockera alla som kommer från en IP-adress som börjar med ” 999.888”, skulle vi lägga till följande direktiv:

Deny from 999.888

för mer information om hur detta fungerar, se detta avsnitt av min dumma htaccess Tricks artikel.

Open access för alla med lösenordsskydd för specifika CIDR nummer

i likhet med den tidigare metoden, här är en teknik för att kräva ett lösenord endast från en utvald CIDR nummer. Denna metod är användbar för att blockera mega-spammare som RIPE, Optinet och andra. Om du till exempel lägger till rad efter rad i Apache Deny – direktiv för adresser som börjar med samma första nummer, välj en av dem och prova en WHOIS-sökning. Listade i Whois-resultaten kommer att vara CIDR-värdet som representerar varje IP-adress som är associerad med det specifika nätverket. Således är blockering via CIDR ett effektivt sätt att vältaligt förhindra att alla IP-instanser av gärningsmannen kommer åt din webbplats. Här är ett generaliserat exempel för blockering av 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>

lösenordsskydda en enda fil

jag har använt denna teknik otaliga gånger. För att lösenordsskydda en enda fil, helt enkelt lägga till detta i din HTAccess-fil:

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

här skyddar vi en fil med namnet ”protected.html” från access. Filen kommer endast att vara tillgänglig efter inlämning av rätt användarnamn och lösenord.

lösenordsskydda flera filer

för att skydda flera filer är metoden mycket lik, bara den här gången använder vi Apache ’ s FilesMatch – direktiv. Detta gör att vi kan lista så många filer som behövs:

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

i det här exemplet skyddar vi två filer med lösenord, ” protected.html”och” passwords.txt”. För att lägga till fler, helt enkelt inkludera fler instanser av ”|(filename\.ext)” i listan över filer.

lösenordsskydda flera filtyper

med den här metoden använder vi Apache ’ s FilesMatch-direktiv för att lösenordsskydda flera filtyper. Här är ett exempel:

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

en gång på plats kräver den här koden ett lösenord för åtkomst till följande filtyper: .inc, .txt, .log, .dat, .zip, och .rar. Anpassa efter dina behov.

lösenordsskydd för allt utom en enda fil

tack vare Brett Batie för denna kraftfulla teknik för att tillåta åtkomst till en enda fil medan lösenordsskydda allt annat:

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

när den placeras i rotkatalogen eller någon överordnad katalog, kommer den här koden att lösenordsskydda allt utom filen med namnet ”open-access.html”, som i sig kan finnas i någon efterföljande katalog eller underkatalog.

för att skydda allt samtidigt som vi tillåter åtkomst till flera filer kan vi använda Apache ’ s FilesMatch – direktiv istället. Här är ett exempel som ger tillgång till ”open-access-1.html”, ”open-access-2.html”, och ”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>

Observera att vi kan konsolidera fillistan enligt följande:

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

ett alternativt tillvägagångssätt för att tillåta öppen åtkomst till alla filer eller grupper av filer är att hitta dem i sin egen katalog med följande direktiv som läggs till i HTAccess-filen:

Allow from all
satisfy any

packa upp sedan

som ni kan se, Apache ’ mod_auth funktionalitet gör det möjligt att konfigurera bara om lösenordsskydd setup Du kan behöva. Från att förhindra åtkomst från specifika IP-adresser och domäner till att endast tillåta åtkomst för specifika filer och kataloger, gör Apache det möjligt att skydda dina filer enkelt och säkert. Och vi har inte ens kommit in i de många möjligheter som finns för att konfigurera specifika användar-och gruppbehörigheter. Jag tror att jag sparar det till en annan artikel. Under tiden, för mer information om Apaches kraftfulla mod_auth, kolla in den officiella dokumentationen.

Jeff Starr

om författaren
Jeff Starr = webbutvecklare. Säkerhetsspecialist. WordPress Buff.