Categorie
Apache

.htaccess password protection

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).

Nota: Sistemi di restrizione di accesso lato client sono totalmente inaffidabili ed andrebbero evitati sempre e comunque.

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.

Nota: ad ogni richiesta sono ricontrollate (in maniera trasparente) le credenziali, questo vuol dire che se andiamo a modificare una password, sarà mostrata nuovamente la maschera di logon anche agli utente autenticati in precedenza all’interno della sessione.

.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
  1. 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.
  2. AuthType: indica il tipo di autenticazione.
  3. AuthUserFile: qua inseriamo il percorso del file .htpasswd, da notare che non si tratta di un URL ma di un server path.
  4. AuthGroupFile: eventuale file per gruppi di unenti (lo vediamo dopo).
  5. requie nell’esempio precedente qualsiasi utente convalidato da password è autorizzato, più avanti vedremo come può essere variato.
Nota: il file .htaccess interessa soltanto la directory nella quale si trova e le relative sottodirectories. Questo vuol dire che ne possiamo avere svariati all’interno di una nostra applicazione. Se per esempio vogliamo restringere l’accesso di una directory di livello inferiore ne potremmo quindi inserirne uno in quella cartella anche se ne abbiamo un altro nella root pubblica.

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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.