/ //

Gestione delle password con PHP: password_hash() - GM Multimedia

Vai ai contenuti

Menu principale:

Gestione delle password con PHP: password_hash()

Guida PHP



     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:
    o PASSWORD_DEFAULT che utilizza l'algoritmo bcrypt;
    o 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
Visitatori online:
Sei il nostro visitatore n°:
© - Copyright 2015. - Tutti i diritti riservati - G.M. Multimedia
Torna ai contenuti | Torna al menu