Skip to main content

Cos’è l’hashing

L’hashing è il processo che, tramite una trasformazione unidirezionale, converte dati in chiaro (come le password) in una stringa di lunghezza fissa. Dallo stesso input viene sempre generato lo stesso hash, ma non è possibile risalire al testo in chiaro a partire dall’hash. La facade Hash di Laravel supporta gli algoritmi di hashing bcrypt e Argon2 per la conservazione sicura delle password.

Confronto tra gli algoritmi

Il “work factor” di bcrypt controlla il tempo necessario per generare l’hash. Più l’hashing è lento, più aumenta la resistenza agli attacchi brute-force. Aumentando il work factor con l’evolvere dell’hardware puoi mantenere il livello di sicurezza.

Flusso di hashing e verifica


Configurazione

Di default Laravel usa il driver bcrypt. Puoi cambiarlo tramite la variabile d’ambiente HASH_DRIVER.
Per personalizzare la configurazione dell’hashing, pubblica il file di configurazione con config:publish.
Dopo la pubblicazione puoi modificare il work factor predefinito e altre opzioni in config/hashing.php.

Uso di base

Hashing di una password

Passando la password in chiaro a Hash::make() ottieni il valore hash. Questo valore va salvato nel database.
Salva il valore hash nel database ma non salvare mai la password in chiaro.

Regolare il work factor di bcrypt

Con l’opzione rounds puoi regolare il costo computazionale della generazione dell’hash. Valori più alti sono più sicuri ma richiedono più tempo di elaborazione. Il valore predefinito (12) è adatto alla maggior parte delle applicazioni.

Regolare il work factor di Argon2

Con Argon2, puoi regolare il costo computazionale tramite le opzioni memory, time e threads.
Per i dettagli sulle opzioni di Argon2 consulta la documentazione ufficiale di PHP.

Verifica delle password

Con Hash::check() puoi verificare se una password in chiaro corrisponde all’hash salvato. È il caso tipico d’uso all’interno del processo di login.
Se usi Auth::attempt() questo processo è automatico e non devi chiamarlo direttamente. Hash::check() è utile quando devi verificare manualmente la password corrente.

Verifica del re-hashing

Con Hash::needsRehash() puoi verificare se il work factor con cui è stato generato l’hash differisce dalla configurazione attuale. Lo usi per aggiornare gli hash esistenti alla nuova configurazione dopo aver cambiato il work factor.
Esempio di re-hash effettuato al successo del login.
Rivedi periodicamente il work factor per adeguarlo al miglioramento delle prestazioni hardware, così da mantenere il livello di sicurezza. Sfruttando needsRehash() puoi aggiornare le password in modo naturale al momento del login degli utenti.

Verifica dell’algoritmo di hashing

Per impostazione predefinita, Hash::check() verifica che l’hash sia stato generato con l’algoritmo attualmente configurato. Se l’algoritmo è diverso viene lanciata una RuntimeException. In questo modo puoi prevenire attacchi basati sulla manomissione dell’algoritmo di hashing. Quando è necessario supportare più algoritmi contemporaneamente, ad esempio durante una migrazione, puoi disattivare questa verifica impostando HASH_VERIFY a false.
Con HASH_VERIFY=false la verifica dell’algoritmo è disattivata. Usalo solo durante il periodo di migrazione e riportalo a true (predefinito) al termine.

Prossimi passi

Introduzione all'autenticazione

Impara la panoramica dell’autenticazione, inclusa l’implementazione del login usando Hash::check().
Ultima modifica il 13 luglio 2026