Gestione delle password con PHP: password_hash()

31 marzo 2017

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'algoritmo bcrypt;
    • PASSWORD_BCRYPT che utilizza l'algoritmo CRYPT_BLOWFISH per produrre un output compatibile con crypt();
  • $options: una delle opzioni più importanti era il salt 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.

Tutte le lezioni

1 ... 36 37 38 ... 52

Se vuoi aggiornamenti su Gestione delle password con PHP: password_hash() inserisci la tua e-mail nel box qui sotto:
Tags:
 
X
Se vuoi aggiornamenti su Gestione delle password con PHP: password_hash()

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy