Password Hashing in PHP: `password_hash()` e `password_verify()`

PHP

Archiviare le password degli utenti in chiaro (plain text) in un database è uno degli errori di sicurezza più gravi che si possano commettere. Se il database viene compromesso, tutte le password sono immediatamente disponibili agli hacker. Le password devono essere sempre salvate sotto forma di hash.

Cos'è l'Hashing?

L'hashing è un processo a senso unico che trasforma una stringa di testo (la password) in una stringa di lunghezza fissa e dall'aspetto casuale (l'hash). "A senso unico" significa che è computazionalmente impossibile risalire dalla hash alla password originale. A differenza della crittografia, non può essere "decriptato".

Perché MD5 e SHA1 non sono più sicuri?

Vecchi algoritmi come MD5 e SHA1 sono troppo veloci. Un hacker può calcolare miliardi di hash al secondo e usare delle "rainbow tables" (tabelle pre-calcolate di hash) per trovare la password originale in pochissimo tempo.

Le Funzioni Native di PHP: La Scelta Giusta

PHP, dalla versione 5.5, offre una serie di funzioni semplici e sicure per l'hashing delle password, che gestiscono tutta la complessità per te.

`password_hash()`: Creare l'Hash

Questa funzione prende la password in chiaro e restituisce un hash sicuro. Usa l'algoritmo Bcrypt, che è volutamente lento per rendere difficili gli attacchi brute-force. Inoltre, gestisce automaticamente la generazione di un "salt" casuale per ogni password, una misura di sicurezza fondamentale.

$password_in_chiaro = 'MiaPassword123';
// Salva $hash_sicuro nel database
$hash_sicuro = password_hash($password_in_chiaro, PASSWORD_DEFAULT);

`password_verify()`: Verificare la Password

Quando un utente cerca di fare il login, non si deve fare l'hash della password che inserisce e confrontarlo con quello nel database. Si usa la funzione `password_verify()`, che fa tutto il lavoro in modo sicuro.

$password_dal_form = 'MiaPassword123';
$hash_dal_database = '...'; // Recupera l'hash salvato

if (password_verify($password_dal_form, $hash_dal_database)) {
    // La password è corretta, l'utente può accedere.
} else {
    // La password è sbagliata.
}

Usare queste due funzioni è il modo standard e corretto per gestire le password in qualsiasi applicazione PHP moderna, come discusso anche nella nostra checklist di sicurezza.

Hai bisogno di una soluzione su misura?

Dalla Web App al gestionale custom, trasformiamo le tue idee in software performante. Contattaci per una consulenza gratuita.

Richiedi una consulenza