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 facadeHash 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 driverbcrypt. Puoi cambiarlo tramite la variabile d’ambiente HASH_DRIVER.
config:publish.
config/hashing.php.
Uso di base
Hashing di una password
Passando la password in chiaro aHash::make() ottieni il valore hash. Questo valore va salvato nel database.
Regolare il work factor di bcrypt
Con l’opzionerounds 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 opzionimemory, time e threads.
Verifica delle password
ConHash::check() puoi verificare se una password in chiaro corrisponde all’hash salvato.
È il caso tipico d’uso all’interno del processo di login.
Auth::attempt() questo processo è automatico e non devi chiamarlo direttamente.
Hash::check() è utile quando devi verificare manualmente la password corrente.
Verifica del re-hashing
ConHash::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.
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.
Riepilogo
Prossimi passi
Introduzione all'autenticazione
Impara la panoramica dell’autenticazione, inclusa l’implementazione del login usando
Hash::check().