Di norma quando abbiamo bisogno di restringere l’accesso di un’area del nostro sito implementiamo dei sistemi di protezione con immissione di nomeutente e password tramite scripts lato server (PHP, Perl, APS.NET) o lato client (JavaScript).
Possiamo ottenere lo stesso risultato attraverso il file .htaccess aggiungendo le direttive necessarie.
.htpasswd
La prima cosa da fare è creare un file .htpasswd. Si tratta di un semplice file di testo che servirà per definire gli utenti autorizzati. La sintassi e semplice il file si compone di una serie di username e password. Ogni riga contiene un nome utente e la password ad esso associata, separati da due punti. Per maggiore sicurezza dobbiamo utilizzare password criptate, Apache riconosce password criptate con l’algoritmo MD5:
simo:$apr1$8ekKD22N$0hxQXJ7fPEr8GCE8fAyAd0 samu:$apr1$3.r6f77U$Ww3OgN7Slz1.o/MTyDpVc. franco:$apr1$NYiUM1aD$JpjNUHAboavvIA7YCGdE/0
Online esistono vari tools per la generazione di password per .htpasswd, es: htpasswd generator.
Per ovvi motivi di sicurezza il file non deve essere posizionato in una directory accessibile dall’esterno, per esempio la directory direttamente al di sopra di quella pubblica potrebbe essere ideale.
.htaccess
Aggiungere le seguenti direttive al nostro file .htaccess o eventualmente crearne uno:
AuthName "Area Riservata" AuthType Basic AuthUserFile /web/mysite/.htpasswd AuthGroupFile /dev/null require valid-user
- AuthName: è il nome dell’area riservata. Possiamo lasciarlo vuoto od immettere del testo entro un limite ragionevole naturalmente. In realtà è solo un pezzo di testo che appare nella finestra di dialogo di richiesta password.
- AuthType: indica il tipo di autenticazione.
- AuthUserFile: qua inseriamo il percorso del file .htpasswd, da notare che non si tratta di un URL ma di un server path.
- AuthGroupFile: eventuale file per gruppi di unenti (lo vediamo dopo).
- requie nell’esempio precedente qualsiasi utente convalidato da password è autorizzato, più avanti vedremo come può essere variato.
Accesso selettivo
Invece di dare accesso a tutti gli utenti con password valide, è possibile limitare l’accesso di una directory ad utenti particolari, esempio:
require user simo franco
In questo caso abbiamo dato accesso agli utenti simo e franco ma non a samu.
Possiamo anche usare la direttiva AuthGroupFile
. Questa imposta il nome di un file testuale contenente l’elenco dei gruppi di utenti per l’autenticazione. Andrà immesso il file-path cioè il percorso del file di gruppo. Ogni riga del file contiene un nome di gruppo seguito da due punti, seguito dai nomi dei membri separati da spazi:
gr1:simo franco gr2:samu
quindi aggiorneremo il nostro .htaccess con:
AuthGroupFile /web/mysite/mygroups require group gr1
Protezione di files individuali
Si potrebbe anche desiderare di proteggere un singolo file in una directory. Possiamo farlo in questo modo:
AuthName "Area Riservata" AuthType Basic AuthUserFile /web/mysite/.htpasswd Allow From All <Files myfile.xxx> Deny From All </Files>
Oppure soltanto a determinate estensioni:
<Files ~ ".*.jpg$"> Require user simo </Files>
Risorse
httpd.apache.org/docs/2.0/programs/htpasswd.html
httpd.apache.org/docs/2.0/mod/mod_auth.html#authgroupfile
www.htaccesstools.com/htpasswd-generator/
www.tools.dynamicdrive.com/password/
Una risposta su “.htaccess password protection”
Ciao,
sto leggendo il tuo interessantissimo blog da questa mattina, in particolare mi interessavano le tue implementazioni di vari Design Pattern, poi mi sono messo a leggere più a casaccio e mi sono imbattuto in questa risorsa e mi sono ricordato di quando anche io la usavo.
Utile se si deve restringere una parte di un sito al volo, ma alla lunga è pericolosa dato che non c’è un controllo sul brute force attack method, e in più gli utenti inseriscono password che farebbero impallidire persino “pippo”.
Oggi non la uso più, ma se si deve utilizzare è meglio sfruttare i tools in modo da dare quanto più filo da torcere ai possibili attacanti.
Per esempio, htpasswd accetta non solo md5 come sistema di hash, ma anche sha1 ( 64 bit ) che per quanto già “crackato” è sempre meglio di md5 che oramai è stramaledettamente insicuro.
Come si fa?
Se stai utilizzando un sistema Linux di qualsiasi tipo, dalla shell: htpasswd -nbs myName myPassword dove myName è il nome da inserire come account e ovviamente myPassword è la nostra password.
Viene restituita una stringa del tipo: myName:{SHA}VBPuJHI7uixaa6LQGWx4s+5GKNE=
Ovviamente niente è perfetto, ma rendere sempre più dura la vita a chi vorrebbe attentare alla nostra sicurezza è il minimo.
Se il tuo sistema non è Linux allora in caso di Windows ci sono tools online, ma ho notato che quasi tutti utilizzano un algoritmo di hasshing molto blando, addirittura ho trovato uno che usa crypt( $mia_password, base64_encode($mia_password)); che genera un hash molto insicuro e che può, a rigore, essere utilizzato solo sui sistemi Unix like.
Quindi meglio andare a scartabellare altrove, o meglio crearsene uno in PHP o un altro linguaggio che rispetti criteri di sicurezza più elevati.
Fonte: http://httpd.apache.org/docs/current/misc/password_encryptions.html
M.