Generazione del file .htpasswd
Genera in sicurezza nel navigatore il file .htpasswd usato per l'autenticazione di base di Apache e Nginx. Sono previsti bcrypt, APR1-MD5 e SHA-1. Le parole d'ordine non vengono trasmesse ad alcun servente.
Che cos'è un file .htpasswd
Un file .htpasswd è un semplice file di testo che conserva, una per riga, coppie nella forma nome utente:sintesi della password. È proprio questo file che Apache e Nginx consultano quando applicano l'autenticazione di base HTTP a una cartella o a un percorso specifico: il server confronta il nome utente digitato dal visitatore e la sintesi della password fornita con il contenuto del file, e concede l'accesso solo se corrispondono. Tradizionalmente si genera con il comando htpasswd installato insieme ad Apache, ma molti hosting condivisi, ambienti containerizzati o postazioni di sviluppo non offrono un accesso semplice al terminale del server.
È proprio in questi casi che uno strumento eseguito interamente nel browser torna utile: riproduce lo stesso formato di output senza bisogno di una connessione SSH o dell'installazione di alcun pacchetto. Questo strumento calcola la sintesi della password inserita con bcrypt, APR1-MD5 oppure SHA-1 e produce una riga pronta all'uso nella forma nome utente:sintesi. Tutto il calcolo avviene in JavaScript lato client: la password in chiaro non viene mai trasmessa in rete. Una volta generato, il file va collocato al di fuori della radice dei documenti del server e il suo percorso va indicato tramite la direttiva AuthUserFile nella configurazione di Apache o Nginx.
Come generare un file .htpasswd
- Aggiungete una riga utente Premete il pulsante «Aggiungi un utente» tante volte quanti sono gli utenti da creare: ogni riga corrisponde a un utente autorizzato ad autenticarsi sul server.
- Inserite nome utente e password Per ciascuna riga indicate il nome utente e la password desiderati. L'icona dedicata consente di mostrare o nascondere il testo digitato per verificarne la correttezza.
- Scegliete l'algoritmo e il costo Selezionate bcrypt, APR1-MD5 o SHA-1 per ciascuna riga in base alla compatibilità richiesta; con bcrypt potete regolare anche il valore del costo, cioè l'esponente che determina il numero di iterazioni.
- Premete Genera Il calcolo della sintesi viene eseguito subito nel vostro browser e un'anteprima del contenuto completo del file .htpasswd compare immediatamente sotto il modulo.
- Copiate o scaricate il risultato Copiate il contenuto negli appunti oppure scaricatelo come file pronto da caricare sul server tramite FTP, SSH o il vostro strumento di distribuzione abituale.
Consigli per sfruttarlo al meglio
- Si raccomanda bcrypt, oggi l'algoritmo più sicuro, utilizzabile con Apache dalla versione 2.4 e con Nginx. Più si alza il valore del costo, più il calcolo rallenta e più l'insieme resiste agli attacchi esaustivi: dieci è il valore comunemente raccomandato.
- APR1-MD5, riconoscibile dal prefisso
$apr1$, si usa quando serve la compatibilità con le versioni di Apache anteriori alla 2.2 e funziona con quasi tutte le versioni di Apache e Nginx. - SHA-1, con il prefisso
{SHA}, offre scarsa resistenza alle collisioni ed è oggi sconsigliato: usatelo soltanto in ambienti datati che ne richiedano la compatibilità. - Si raccomanda vivamente di collocare il file .htpasswd in una posizione non raggiungibile direttamente dal servente web, cioè fuori dalla radice dei documenti.
- Usatelo insieme a HTTPS. Le credenziali dell'autenticazione di base sono soltanto codificate in Base64 e non cifrate: in HTTP viaggerebbero in chiaro.
Casi d'uso
Proteggere un ambiente di preproduzione
Bloccate rapidamente un sito ancora in sviluppo per impedire ai motori di ricerca e a visitatori non autorizzati di raggiungerlo prima della pubblicazione ufficiale.
Limitare l'accesso a un pannello di amministrazione interno
Molti strumenti interni o cruscotti sviluppati internamente non dispongono di un proprio sistema di accesso: l'autenticazione di base aggiunge una protezione minima ma efficace in pochi minuti.
Combinarlo con una restrizione per indirizzo IP
Quando la sola restrizione per indirizzo IP non è praticabile, ad esempio per collaboratori che si connettono da indirizzi variabili, unire i due meccanismi rafforza la difesa in profondità.
Proteggere soltanto alcuni percorsi di un'API
Combinando questo file con le direttive location o Directory della configurazione del server, potete limitare l'autenticazione a percorsi specifici senza toccare il resto del sito.
Aggiungere nuovi utenti a un servizio già in produzione
Generate soltanto le righe relative ai nuovi account da aggiungere e accodatele al file .htpasswd esistente, senza dover rigenerare gli utenti già presenti.
Glossario
- Autenticazione di base (Basic Authentication)
- Metodo di autenticazione standardizzato dal protocollo HTTP. Nome utente e password vengono codificati in Base64 e inviati a ogni richiesta nell'intestazione
Authorization, per poi essere verificati lato server prima di concedere l'accesso alla risorsa richiesta. - bcrypt
- Algoritmo di sintesi della password che incorpora un sale casuale. Il valore di costo, regolabile, permette di rallentare volutamente il calcolo, mantenendolo resistente agli attacchi esaustivi anche quando l'hardware diventa più veloce. È l'algoritmo oggi raccomandato per questo file.
- APR1-MD5
- Formato di sintesi proprio di Apache, basato su MD5, il cui risultato inizia sempre con
$apr1$. Si mantiene principalmente per garantire la compatibilità con versioni datate di Apache che non supportano bcrypt. - SHA-1 (prefisso {SHA})
- Formato di sintesi il cui risultato inizia con
{SHA}. Non prevede alcun sale e presenta una resistenza alle collisioni ormai ritenuta debole: il suo utilizzo non è quindi consigliato per nuove implementazioni. - Sale (salt)
- Sequenza di caratteri casuale aggiunta alla password prima del calcolo della sintesi. Garantisce che due password identiche producano sintesi diverse, rendendo inefficaci gli attacchi basati su tabelle precalcolate.
- Radice dei documenti (DocumentRoot)
- Cartella a partire dalla quale un server web espone pubblicamente i propri file. Il file .htpasswd deve trovarsi obbligatoriamente al di fuori di questa cartella, altrimenti potrebbe essere letto direttamente da un browser.
- AuthUserFile
- Direttiva di configurazione di Apache che indica il percorso assoluto del file .htpasswd da usare per verificare le credenziali durante l'autenticazione di base.
Domande frequenti
.htaccess oppure nella configurazione principale, indicando in AuthUserFile il percorso del file generato.AuthType Basic AuthName "Restricted Area" AuthUserFile /etc/apache2/.htpasswd Require valid-user
location /admin {
auth_basic "Restricted Area";
auth_basic_user_file /etc/nginx/.htpasswd;
}Nginx prevede tanto bcrypt quanto APR1-MD5.utente:sintesi, alla fine del file. Ogni riga corrisponde a un utente; le righe vuote e quelle di commento, che cominciano con #, sono ignorate.
A proposito — perché l'autenticazione di base, per quanto antica, si usa ancora
L'autenticazione di base di HTTP è un meccanismo semplicissimo, definito nel 1999 dalla norma RFC 2617 e oggi aggiornato dalla RFC 7617. Il funzionamento è elementare: nome utente e parola d'ordine si separano con i due punti, si codificano in Base64 e si inseriscono nell'apposita intestazione di autorizzazione.
Proprio per la sua semplicità è tuttora largamente usata, in particolare come prima linea di difesa per gli ambienti di prova e gli strumenti interni, in combinazione con le restrizioni per indirizzo IP, oppure per proteggere in fretta il punto di accesso di un'interfaccia. Il vantaggio maggiore è che funziona con due o tre righe di configurazione e non richiede né componenti aggiuntivi né una base di dati.
Va però usata con cautela: non prevede una disconnessione, poiché la sessione dura finché il navigatore resta aperto, e non offre di serie né la scadenza delle parole d'ordine né l'autenticazione a più fattori. Per i servizi che richiedono un'autenticazione vera e propria conviene valutare OAuth 2.0 o i protocolli di identità che vi si fondano.