Come creare un’area riservata in 5 minuti?
Ti sarà certamente capitato di dover realizzare un’area riservata nel tuo sito. Se non hai necessità particolari a livello di gestione ed il tuo bisogno è limitato al richiedere dei dati di autenticazione per poter accedere ad una cartella, è certamente sproporzionato sviluppare un sistema in PHP/Mysql/Sessioni come si farebbe in altri casi.
In questo articolo vedremo come implementare un’area riservata in pochi minuti utilizzando ancora una volta le potenzialità di Apache e dei files .htaccess.
Creiamo un lista di utenti autorizzati
Innanzitutto dovremo creare una lista di utenti autorizzati con relative password in questo formato (utilizza un normalissimo editor di testo):
utente1:passwordcriptata utente2:passwordcriptata utente3:passwordcriptata
Per criptare le password è possibile utilizzare il tools di Apache da riga di comando, utilizzando la seguente sintassi:
htpasswd –c /precorso_completo_e_assoluto/.htpasswd utente1
Una volta dato questo comando, verrà richiesto di inserire la password per due volte. In seguito il file .htpasswd verrà modificato con l’aggiunta di utente1 con relativa password correttamente criptata.
Oppure (molto più semplice) utilizza uno dei numerosi tools online, ad esempio questo:
http://www.4webhelp.net/us/password.php
Se lavori con Apache su piattaforma Windows dovrai invece per forza utilizzare il tool di Apache, altrimenti non funzionerà.
Salva ora il tuo file come .htpasswd (nessun nome – estensione htpasswd) e posizionalo in una cartella sicura e non leggibile del web server. Nel nostro caso, andrà benissimo la cartella stessa che intendiamo proteggere.
Verifichiamo il percorso assoluto della cartella pubblica
Verifica ora il percorso assoluto della cartella pubblica del tuo web server. Se sei in hosting il percorso potrebbe essere un po’ strano in quanto un unico web server gestisce molti siti tramite il sistema dei virtual host. Per verificare questo percorso, esegui il seguente script php, salvandolo nella root del sito e digitando l’url della pagina che contiene lo script:
<?php echo $_SERVER["DOCUMENT_ROOT"]; ?>
Il risultato potrebbe essere qualcosa del genere:
/home/virtual/virtual-site95/var/www/html/
Questa è la posizione della tua cartella pubblica. Ci serve conoscere questo percorso in quanto dovremo indicare con esattezza dove si trova il file .htpasswd.
Configuraimo il file .htaccess
Ora crea il file .htaccess che avrà questo formato:
AuthUserFile /home/virtual/virtual-site95/var/www/html/cartella_da_proteggere/.htpasswd AuthName AreaRiservata AuthType Basic require user utente1 require user utente2
Se hai già un file .htaccess nella cartella, aggiungerai semplicemente queste direttive a quanto contenuto nel file.
Come vedi è necessario indicare con AuthUserFile il percorso del file .htpasswd, che noi abbiamo posizionato nella cartella che intendiamo proteggere, la stessa dunque nella quale salveremo il file .htaccess.
Con AuthName possiamo stabilire un messaggo che apparirà nella finestra del login:

AuthType definisce il tipo di autenticazione. Oltre a “basic” abbiamo anche il tipo “digest“.
Nell’ultima riga infine diciamo che a quest’area sono ammessi gli utenti utente1 e utente2. Anche se utente3 fornisse la giusta password, non sarebbe ammesso.In questo modo possiamo utilizzare lo stesso file .htpasswd per diverse aree protette, e tramite il file .htaccess definire ad esempio che nella cartella “x” possono entrare tutti, mentre nella cartella “y” solo utente1 e utente2. Naturalmente la cartella “x” e la cartella “y”avranno al loro interno un file .htaccess diverso.
Nel caso in cui volessimo autorizzare tutti gli utenti presenti nel file .htpasswd, basta scrivere nell’ultima riga del file .htaccess:
require valid-user
Conclusioni
Se non hai necessità particolari, quello che abbiamo appena visto è un modo semplice e veloce per proteggere le tue cartelle.
28 commenti
Trackback e pingback
-
Perché non sottovalutare la sicurezza del tuo sito Wordpress | Your Inspiration Web
[…] non è così strano avere un IP statico. In caso potreste voler proteggere la cartella wp-admin realizzando un’area riservata…
Facile e ben spiegato, grazie! ;)
Grazie Francesco.
Ne approfitto per fare una precisazione. Ho parlato di riga di comando perchè ho un cervello linux-like (se volete farmi fare qualcosa basta che mi dite: “sudo fai quella cosa”). Per gli utenti windows si intende il prompt di dos e bisognerà navigare con il comando cd fino alla cartella bin di apache.
Ma già lo sapevate :-)
Per gli utenti Mac… non lo so!
anche per noi utenti mac è sudo “comando” visto che siamo figli di unix
ovviamente complimenti per l’articolo.. direi molto chiaro :D
Ciao Nicolas, grazie :-)
Come sempre un’ottima guida. Ma voi guide fatte male nn ne sapete fare? E che diavolo: siete la precisione fatta persona ahah
Non ti preoccupare Caluk. Settimana scorsa ho sbagliato una virgola in un articolo e il giorno dopo avevo la portiera della macchina graffiata. Ho capito che le due cose erano collegate dal fatto che i graffi erano 12, perfettamente allineati e compatibili con il framework grid 960. Praticamente una firma.
Mi fischiano le orecchie =)
Complimenti per l’ottima guida, Maurizio, semplice e lineare.
Lo sapevo che eri stato tu Nando
lol ….. :D
Complimenti anche da parte mia che oramai seguo questo blog da un po’ di tempo!
volevo chiedere se questa tecnica può andare bene per una parte riservata del sito come un pannello di amministrazione o ci sono altre tecniche alternative e che meglio si adattano allo scopo? grazie
Va benissimo anche per un’arera amminmistrativa. L’importante é che tutto quello che riguarda l’amministrazione sia in quella cartella.
Non so se sia ancora così, ma fino a qualche anno fa OScommerce utilizzava questo metodo per proteggere l’area amministrativa.
mitici, ci stavo appunto lavorando ieri!
Lo sappiamo dobrio. E’ per questo motivo che abbiamo realizzato e pubblicato questo articolo :-)
Eh si, apache è davvero una mano santa per quanti non hanno bisogno di una intera tabella del database per memorizzare utenti (vedi aree riservate per piccoli siti).
Un ottimo lavoro di Maurizio! :-)
Comunque sarebbe interessante vedere come mascherare questo tipo di autenticazione graficamente: un normale form html, scriptino in php per l’autenticazione…
Lo so, ce ne sono parecchie di guide come questa che ho proposto ma a mio avviso danno per scontate molte cose (come ad esempio dove andare a piazzare il file php che si occupa dell’autenticazione) e il neofita ne deve girare 4 o 5 prima di venire a capo del problema.
Ciao Vito.
PHP può interagire con Apache anche in questi ambiti.
Prendo nota e magari in futuro approfondisco questo argomento.
Una domanda: se avessi sotto lo Zend Framework e dovessi proteggere l’area http://www.miosito.it/amministrazione che sappiamo non essere una cartella vera e propria come dovrei fare secondo te?
Perché dici che non é una cartella vera e propria?
Così come scritto “amministrazione” é una cartella
Chiarissimo. Devo dire che mi è servito come riscontro su quello che avevo già fatto. Il provider su cui mi appoggio (Aruba) offre un servizio che consente di profilare l’accesso a delle directory protette.
Purtroppo non riesco a risolvere un problema: malgrado la (apparentemente) corretta profilazione utente, al login ottengo sempre il messaggio 403 (mancanza di grants per accedere alla directory riservata).
Grazie comunque.
I’ve been browsing on-line greater than 3 hours today, but I by no means discovered any fascinating article like yours. It is pretty worth sufficient for me. In my view, if all site owners and bloggers made just right content material as you did, the net will probably be much more helpful than ever before.
Ciao,
articolo di semplice da comprendere, solo che io ho una difficoltà e un incongruenza
In pratica quando vado ad inserire nome utente e password, mi invita a rimettere i dati.
L’incongruenza è data dal fatto che andando nel pannello di amministrazione dello spazio web
mi trovo un indirizzo
AuthUserFile /home/a4425987/public_html/riservato/.htpasswd
AuthType Basic
require valid-user
AuthName “Area Riservata”
mentre utilizzando lo script me ne trovo un altro
/usr/local/apache/htdocs
Sicuramente sbaglio qualcosa, ma cosa?
Grazie per il tuo aiuto ;)
Ciao, mi servirebbe un aiutino, hai skype, facebook o una normale mail dove posso contattarti??
Ciao. Questo metodo garantisce la privacy assoluta dei file in quella cartella anche se quest’ultima è nota giusto?
Mettiamo che il sito sia http://www.sito.com e la cartella da rendere riservata al solo utente admin inserito in .htpasswd sia in http://www.sito.com/admin e contenga tutti i file php ecc ecc.. Se uso questo metodo non è possibile in alcun modo leggere quei file senza conoscere username e password.. Confermi? Grazie mille..
Esatto più o meno…
Diciamo che oltre al fatto che conoscendo l’url completa l’utente non possa accedervi voglio creare un area personale cioè
facciamo un esempio con le foto:
Utente1
Utente2
con utente1 vado in http://www.sito.com/utente1/foto.jpg
ed il sito mi fa vedere la foto (insomma accede alla cartella)
se invece ci vado con utente2 non mi deve far accedere
Questo è solo un esempio per far capire il concetto, so che in questo caso mi basterebbe mettere un nome casuale al file
Ottimo articolo, mi avete dato una grande mano! Ma mi chiedevo, da neofita, se volessi implementare un tastino o che altro per il logout?
Ciao,
ma questo metodo in caso di woocommerce potrebbe creare dei problemi per gli accessii allo shop secondo te?
Scusate l’ignoranza. Ho quasi capito tutto, mi resta da capire se questo metodo richiede che Apache si installato sul server.