Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 37 di 67
  • livello intermedio
Indice lezioni

Gestione delle password con PHP: password_hash()

Impariamo ad utilizzare la funzione password_hash() di PHP come alternativa a crypt() per la generazione di password hash più sicuri.
Impariamo ad utilizzare la funzione password_hash() di PHP come alternativa a crypt() per la generazione di password hash più sicuri.
Link copiato negli appunti

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 bcrypt
    • PASSWORD_BCRYPT CRYPT_BLOWFISH crypt()
  • $options salt

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() password_hash() password_verify()

  • $password
  • $hash

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.

Ti consigliamo anche