.htaccess password protection

2 Mar

Out Of Date Warning

Questo post è stato pubblicato più di 2 anni fa (il 2 marzo 2012). Le idee vanno avanti velocemente, le prospettive cambiano quindi i contenuti potrebbero non essere aggiornati. Ti prego di tenere in considerazione questo, e di verificare le informazioni tecniche presenti nell'articolo prima di farne affidamento per i tuoi scopi.

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:

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:

  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:

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:

quindi aggiorneremo il nostro .htaccess con:

Protezione di files individuali

Si potrebbe anche desiderare di proteggere un singolo file in una directory. Possiamo farlo in questo modo:

Oppure soltanto a determinate estensioni:

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/

Un Commento su “.htaccess password protection”

  1. Marco Grazia 27 ottobre 2016 at 11:59 #

    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