Proteggere delle pagine HTML con htaccess


Uso htaccess

Proteggere con password le aree del sito utilizzando htaccess

Una domanda che ci si pone di frequente è: come faccio a proteggere delle pagine HTML in modo che vi si possa accedere solo digitando username e password?
Ci sono vari modi, ma quello più semplice è utilizzare il sistema di autenticazione base offerto da Apache. Innanzitutto inserite tutte le pagine   protette in un’unica cartella, perché, sebbene sia possibile proteggere anche documenti singoli, la soluzione più pratica è proprio quella di proteggere un’intera directory.

Nella directory protetta andrà caricato un file chiamato “.htaccess” che può essere creato con un qualsiasi editor di testo (per esempio il blocco note di Windows). Il contenuto del file dovrà essere simile a questo:

AuthType Basic
AuthName “Accesso riservato”
AuthUserFile /path/del/file/.htpasswd
Order deny,allow
deny from all
allow from all
require valid-users

Potete sostituire “Accesso riservato” con qualunque altro messaggio riteniate opportuno.

Attenzione invece al parametro /path/del/file/.htpasswd. Il file .htpasswd è quello che dovrà contenere tutti i dati degli utenti e le  relative password; dovreste quindi, se possibile, caricarlo in una parte del disco che non sia accessibile via web. Generalmente, comunque, Apache è configurato per non servire file il cui nome cominci con un punto.

 

Una volta caricato il file .htaccess nella cartella, scoprirete che sarà impossibile cercare di accedere a una pagina all’interno di quella directory, ottendo invece un messaggio di errore.

L’errore è dovuto al fatto che non avete ancora creato il file .htpasswd contenente i dati degli utenti. Insieme ad Apache viene fornito un programmino  chiamato htpasswd (questa volta senza punto davanti) utilizzato proprio per creare le password.

Se avete accesso al server in telnet o in ssh potete utilizzarlo: è molto semplice. Una volta che vi siete collegati al server, digitate il comando:
htpasswd –c /path/del/file/.htpasswd nomeutente
Vi verrà chiesta la password per l’utente “nomeutente”, che andrà digitata due volte per conferma. Dopodiché il programma provvederà a creare un nuovo file .htpasswd con la prima password archiviata.  Per creare altri utenti si userà sempre lo stesso comando, ma senza l’opzione –c (che serve proprio per creare un nuovo file).
htpasswd /path/del/file/.htpasswd altroutente
Se, come accade spesso, utilizzando un servizio di hosting non si ha accesso diretto al server, ma solo in ftp,  si può provare a creare il file .htpasswd a mano, usando sempre un editor testuale. Il file dovrà avere questo formato: 

nomeutente:passwordcodificata
altroutente:passwordcodificata

Ecco un esempio concreto:

valkiro:8buNZqZdUHkG2
carlo:Js.PwbZ8hh0cU
In basso verrà mostrata la riga già pronta da copiare e incollare nel file .htpasswd. con la parola codificata.Il dubbio è: come dev’essere codificata la password? Se usate linguaggi come Perl o PHP non dovreste avere difficoltà, sfruttando le funzioni offerte da questi linguaggi. Altrimenti è possibile ricorrere a siti che offrono questo servizio, per esempio  http://www.ovh.it/supporto/strumenti/crypt_password.pl si inserisce la password, e poi si fa clic su “codifica password”.
Un paio di dettagli circa .htpasswd
Innanzitutto, notate che nel file .htpasswd viene memorizzata la password criptata.

Non è teoricamente impossibile ricavare la password originale da una password criptata, ma è senza dubbio molto complesso. Se volete essere in grado di rispondere al vostro utente quando vi  dirà di averla dimenticata vi converrà custodire in un luogo ben sicuro la copia delle password originali.

Ricordate anche che quando il server chiede all’utente di fornire username e password, questi vengono trasmessi attraverso la rete non criptati. Possono quindi, in linea teorica, essere intercettati .

È chiaro che se volete solo pubblicare dei listini prezzi che siano accessibili solo ai rivenditori autorizzati potete  permettervi di correre il rischio; ben diverso sarebbe pensare di registrare dati sensibili come numeri di carta di credito.

In questo caso bisognerà per forza ricorrere a sistemi di sicurezza di ben altro livello, come il protocollo https con codifica SSL.