HTAccess Password-Trucchi di protezione

♦ Pubblicato da Jeff Starr in .htaccess, Security
Updated June 30, 2018 • 25 commenti

Recentemente un lettore ha chiesto come proteggere con password una directory per ogni IP specificato consentendo l’accesso aperto a tutti gli altri. Nel mio articolo, Stupid htaccess Tricks, mostro come proteggere con password una directory per ogni IP tranne quello specificato, ma non per il caso inverso. In questo articolo, dimostrerò questa tecnica insieme a un’ampia varietà di altri utili trucchi di protezione tramite password, tra cui alcuni dei miei stupidi trucchi htaccess articolo. Prima di entrare nelle cose succose, esamineremo alcune nozioni di base sulla protezione con password HTAccess.

La protezione con password HTAccess funziona in modo a cascata

Prima di iniziare, ci sono alcune cose che devi sapere sulle varie direttive di protezione con password di Apache. Innanzitutto, questi trucchi di protezione con password si applicano alla directory in cui sono posizionati. Ad esempio, per proteggere con password l’intero sito, è necessario inserire uno di questi trucchi nel file HTAccess root accessibile al Web per il sito. Le direttive HTAccess vengono applicate lungo la struttura delle directory, in modo a cascata, in modo tale che anche tutte le sottodirectory siano protette.

Hai bisogno di due file per la protezione con password: htaccess e htpasswd

La seconda cosa che devi sapere è che, nella maggior parte dei casi, ci sono due parti per qualsiasi implementazione di protezione con password: il file .htaccesse il file .htpasswd. Il file .htaccess conterrà uno qualsiasi dei trucchi dolci forniti in questo articolo, mentre il file .htpasswd conterrà il nome utente richiesto e una versione crittografata della password.

Esistono diversi modi per generare il file. htpasswd. Se hai dimestichezza con Unix, puoi semplicemente eseguire il comando ” htpasswd“. Ad esempio, inserendo il seguente comando verrà creato un file di password funzionante nella directory /home/path/ :

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

Posizionare il file della password sopra la directory principale accessibile dal Web è una buona misura di sicurezza. Se si esamina il file dopo che è stato creato, l’unica cosa che conterrà è una riga simile a questa:

username:Mx1lbGn.nkP8

Invece di eseguire un comando Unix, potresti preferire utilizzare uno dei 200.000 servizi online che forniscono un generatore di password online.

Indipendentemente da come o dove si decide di creare il file. htpasswd, tenere presente la sua posizione per l’utilizzo nei file HTAccess associati. E sì, è possibile utilizzare un file .htpasswd per più file HTAccess posizionati in più directory.

Sapere quale versione di Apache si sta utilizzando

In ciascuno degli esempi seguenti, le direttive sono racchiuse in un contenitore <IfModule>. Questo per evitare che il server si blocchi se i moduli Apache richiesti non sono disponibili o non installati. Generalmente, i moduli richiesti saranno presenti, ma il controllo <IfModule> è una buona misura precauzionale.

Quando si implementa uno qualsiasi dei metodi di protezione della password in questo articolo, assicurarsi di controllare due volte quale versione di Apache si sta utilizzando prima di iniziare. Gli esempi in questo articolo presuppongono che si stia utilizzando Apache 1.3 o 2.0, poiché i contenitori <IfModule> stanno controllando la presenza del modulo mod_auth. Pertanto, se si esegue Apache 2.2 (o superiore), si desidera sostituire gli attuali contenitori <IfModule> con quanto segue:

<IfModule mod_authn_file.c></IfModule>

In caso di dubbio, chiedi al tuo host, installa l’estensione Showip per Firefox o scava nel pannello di controllo del tuo server. E, se proprio non lo sai, non ti interessa o non riesci a capirlo, rimuovi i tag di apertura e chiusura <IfModule> dal metodo che vorresti usare e chiamalo buono. Senza di loro, se il server non è dotato del modulo richiesto, restituirà semplicemente un messaggio di errore 500, che viene facilmente risolto rimuovendo le direttive della password.

È possibile personalizzare il dialogo sulla richiesta di password

L’ultima cosa che si deve sapere prima di immergersi in un po ‘ di dolce trucchi è che si può personalizzare il messaggio visualizzato il prompt per la password, modificare la seguente riga in ciascuno degli esempi in questo articolo:

AuthName "Username and password required"

modificando il testo all’interno delle citazioni, si può utilizzare qualsiasi lingua che si desidera utilizzare per la richiesta di password.

Così ora, a questo punto della nostra avventura, siamo pronti a tuffarsi in alcuni trucchi di protezione con password HTAccess succosa..

Protezione con password di base

Per proteggere con password il tuo sito o qualsiasi directory, inserisci questo codice nel file HTAccess associato:

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

Questo è più o meno di base come si arriva. Ricordarsi di creare il file della password e specificare la sua directory nella prima riga. Passiamo a qualcosa di più interessante.

Apri-accesso per IP, proteggere con password tutti gli altri

Questo metodo è grande durante lo sviluppo del progetto, in cui si vuole aprire l’accesso con la capacità di dare agli altri l’accesso tramite password:

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

mettendo quel codice nel file HTAccess della directory che si desidera proteggere, solo IP specificato, sarà consentito l’accesso aperto; tutti gli altri, sarà necessario immettere il nome utente corretto e la password.

Accesso aperto più IPS, proteggere con password tutti gli altri

Il codice di cui sopra può essere modificato facilmente per fornire più IPS accesso aperto, negando tutti gli altri:

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

È possibile aggiungere tutti gli IP necessari. Questo metodo è ottimo durante lo sviluppo del progetto, dove si applicheranno le seguenti condizioni:

  • Progetto di sviluppo rimane privato per i visitatori regolari
  • l’Accesso può essere concesso ai clienti (o di chiunque), fornendo la password
  • i Membri del team di sviluppo hanno accesso aperto sulle rispettive macchine

oltre a fornire un accesso illimitato al vostro team, si potrebbe anche voler mantenere alcuni servizi web in mente tra le seguenti direttive (inserire sopra il Satisfy Any direttiva):

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

Accesso aperto a tutti con protezione tramite password per IP specifici

Questo metodo è utile per una varietà di situazioni, inclusi i casi in cui si desidera bloccare un elenco di IP dannosi.

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

È possibile elencare tutti gli indirizzi IP necessari. Si può anche negare da interi blocchi IP troncando l’indirizzo di conseguenza. Ad esempio, per bloccare tutti quelli che provengono da un indirizzo IP che inizia con ” 999.888“, aggiungeremo la seguente direttiva:

Deny from 999.888

Per ulteriori informazioni su come funziona, vedere questa sezione del mio stupido articolo Trucchi htaccess.

Accesso aperto per tutti con password-protect per numero CIDR specifico

Simile al metodo precedente, ecco una tecnica per richiedere una password solo da un numero CIDR selezionato. Questo metodo è utile per bloccare mega-spammer come RIPE, Optinet e altri. Se, ad esempio, ti ritrovi ad aggiungere riga dopo riga delle direttive Apache Deny per gli indirizzi che iniziano con gli stessi primi numeri, scegli uno di essi e prova una ricerca whois. Elencato all’interno dei risultati whois sarà il valore CIDR che rappresenta ogni indirizzo IP associato a quella particolare rete. Pertanto, il blocco tramite CIDR è un modo efficace per impedire in modo eloquente a tutte le istanze IP dell’autore del reato di accedere al tuo sito. Ecco un esempio generalizzato per il blocco da parte di 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>

Proteggere con password un singolo file

Ho usato questa tecnica innumerevoli volte. Per proteggere con password un singolo file, è sufficiente aggiungere questo al file 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>

Qui stiamo proteggendo un file chiamato “protected.html” dall’accesso. Il file sarà disponibile solo dopo l’invio del nome utente e della password corretti.

Proteggere con password più file

Per proteggere più file, il metodo è molto simile, solo che questa volta stiamo usando la direttiva FilesMatch di Apache. Questo ci permette di elencare tutti i file necessari:

# 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 questo esempio, stiamo proteggendo con password due file,” protected.html “e”passwords.txt“. Per aggiungere altro, è sufficiente includere più istanze di “|(filename\.ext) ” nell’elenco dei file.

Proteggere con password più tipi di file

Con questo metodo, stiamo usando la direttiva FilesMatch di Apache per proteggere con password più tipi di file. Ecco un esempio:

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

Una volta sul posto, questo codice richiederà una password per l’accesso ai seguenti tipi di file: .inc, .txt, .log, .dat, .zip, e .rar. Personalizzare in base alle proprie esigenze.

protezione con Password per tutto, tranne che in un unico file

> Grazie a Brett Batie per questa potente tecnica per consentire l’accesso ad un singolo file, mentre proteggere con password tutto il resto:

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

Quando è posizionato nella directory principale o in una qualsiasi directory padre, questo codice proteggere con password tutto tranne il file con il nome “open-access.html“, che di per sé può essere situato in qualsiasi successivo directory o sottodirectory.

Per proteggere tutto, consentendo l’accesso a più file, possiamo invece utilizzare la direttiva FilesMatch di Apache. Qui è un esempio permettendo l’accesso al “open-access-1.html“, “open-access-2.html“, e “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>

Nota che si può consolidare l’elenco di file come segue:

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

Un approccio alternativo per consentire l’accesso aperto a qualsiasi file o gruppo di file è quello di individuare nella propria cartella con le seguenti direttive aggiunto anche il file HTAccess:

Allow from all
satisfy any

avvolgetelo quindi

Come si può vedere, Apache’ mod_auth funzionalità rende possibile configurare solo su di password di protezione di installazione potrebbe essere necessario. Da impedire l’accesso da specifici indirizzi IP e domini per consentire l’accesso solo per i file e le directory specifiche, Apache permette di proteggere i file in modo semplice e sicuro. E non abbiamo nemmeno ottenuto nelle molte possibilità disponibili per la configurazione di autorizzazioni di utenti e gruppi specifici. Penso che lo conserverò per un altro articolo. Nel frattempo, per ulteriori informazioni sul potente mod_auth di Apache, consulta la Documentazione ufficiale.

Jeff Starr

Informazioni sull’autore
Jeff Starr = Sviluppatore Web. Specialista della sicurezza. WordPress Appassionato.