Gestione delle password con PHP: password_hash()
Nella lezione sulla gestione delle password con PHP abbiamo introdotto la funzione crypt()
per la generazione di hash più sicuri utilizzando diversi algoritmi. Essa è però abbastanza macchinosa da utilizzare e aumenta le possibilità di errore lato programmazione.
Per risolvere questi problemi è stata introdotta la funzione password_hash(string $password , integer $algo [, array $options ])
che accetta 3parametri:
- la password da codificare;
- l'algoritmo da utilizzare per la codifica. Quelli supportati sono:
PASSWORD_DEFAULT
che utilizza l'algoritmobcrypt
;PASSWORD_BCRYPT
che utilizza l'algoritmoCRYPT_BLOWFISH
per produrre un output compatibile concrypt()
;
$options
: una delle opzioni più importanti era ilsalt
che consentiva di utilizzarne uno personalizzato. Tale opzione è stata deprecata dalla versione 7 ed è consigliabile non utilizzarla per generare hash più sicuri.
Vediamo come utilizzare la funzione per generare un hash:
$password = 'LaM1aPassW0rd';
$hash = password_hash($password, PASSWORD_DEFAULT);
// l'hash sarà simile a $2y$10$xjX7pVRvyMTgJrplRWyS0O7Fx2iNGEq9iZTdRWk0BTsRWeCoI1xem
$hash = password_hash($password, PASSWORD_BCRYPT);
// l'hash sarà simile a $2y$10$VuCi8po/wzdWfGH7G52okuM.o41mv7kkTrkTb09zlsJcEyujL2k6.
Come per la funzione crypt()
anche password_hash()
ha una sua funzione di verifica dell'hash, essa è chiamata password_verify()
e prende in ingresso due parameteri:
$password
: la password da verificare;$hash
: l'hash da comparare.
Vediamo quindi un esempio completo simulando un login:
$password = 'LaM1aPassW0rd'; // password valida
$hashedPassword = password_hash($password, PASSWORD_DEFAULT); // hash memorizzato nel database
$userPassword = 'LaM1aPassW0rd'; // password inserita dall'utente nel login
if (password_verify($userPassword, $hashedPassword)) {
echo "Accesso effettuato con successo";
} else {
echo "La password inserita non è corretta";
}
Come possiamo notare, l'utilizzo della funzione password_hash()
è più semplice rispetto a quello di crypt()
. Il vantaggio principale è quello di non avere più bisogno di generare manualmente un salt con il quale definire l'algoritmo di codifica da utilizzare, tutto il lavoro viene infatti delegato al PHP.
Se vuoi aggiornamenti su PHP inserisci la tua email nel box qui sotto:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
La tua iscrizione è andata a buon fine. Se vuoi ricevere informazioni personalizzate compila anche i seguenti campi opzionali:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
I Video di HTML.it
Sandro Paganotti
Sandro Paganotti ci parla di WbRTC e delle sue potenzialità per gli sviluppatori.