⊗ppPmAuHFP 426 of 447 menu

Funzione password_hash

In realtà, la funzione md5 e la salatura delle password con il suo utilizzo sono considerati obsoleti. L'abbiamo studiata per farvi comprendere il materiale successivo, e anche perché potreste imbattervici lavorando su progetti di altri.

Esiste un modo più avanzato per ottenere una password salata. Per questo si utilizza la funzione password_hash. Come primo parametro accetta una stringa, e come secondo - l'algoritmo di cifratura (ne parleremo più avanti), e restituisce l'hash di questa stringa insieme al sale.

Provate a eseguire questo codice più volte:

<?php echo password_hash('12345', PASSWORD_DEFAULT); ?>

Ogni volta otterrete un risultato diverso e in questo risultato la prima parte della stringa sarà il sale, mentre la seconda parte - la password salata.

Supponiamo di avere un hash, ottenuto dalla funzione password_hash e una certa password. Per verificare se è l'hash di questa password o meno, si dovrebbe usare la funzione password_verify - come primo parametro accetta la password, e come secondo - l'hash, e restituisce true o false.

Vediamo un esempio:

<?php $password = '12345'; // password $hash = '$2y$10$xoYFX1mFPxBSyxaRe3iIRutxkIWhxGShzEhjYUVd3qpCUKfJE1k7a'; // hash if (password_verify($password, $hash)) { // l'hash è di questa password } else { // l'hash non è di questa password } ?>

Cosa ci dà questo nella pratica: possiamo non creare un campo separato nel database per memorizzare il sale, non preoccuparci di generare questo sale - PHP farà tutto per noi!

Ciò significa che nel database, nel campo password memorizzeremo la password salata insieme al suo sale. Inoltre, la password hashata avrà una lunghezza maggiore. Pertanto nel database dobbiamo correggere la dimensione del campo password e impostarla su 60 caratteri.

Ora correggiamo il codice di registrazione. Ecco quello che abbiamo al momento:

<?php function generateSalt() { $salt = ''; $saltLength = 8; // lunghezza del sale for($i = 0; $i < $saltLength; $i++) { $salt .= chr(mt_rand(33, 126)); // carattere dalla tabella ASCII } return $salt; } $salt = generateSalt(); // sale $password = md5($salt . $_POST['password']); // convertiamo la password in hash salato ?>

Utilizzando password_hash possiamo ridurlo a:

<?php $password = password_hash($_POST['password'], PASSWORD_DEFAULT); ?>

Allo stesso modo, correggeremo il codice di autenticazione:

<?php $login = $_POST['login']; $query = "SELECT * FROM users WHERE login='$login'"; // otteniamo l'utente tramite il login $res = mysqli_query($link, $query); $user = mysqli_fetch_assoc($res); if (!empty($user)) { $hash = $user['password']; // password salata dal DB // Verifichiamo la corrispondenza tra l'hash dal database e la password inserita if (password_verify($_POST['password'], $hash)) { // tutto ok, autentichiamo... } else { // la password non corrisponde, visualizziamo un messaggio } } else { // non esiste un utente con questo login, visualizziamo un messaggio } ?>

Rielaborate la vostra autenticazione e registrazione utilizzando le nuove funzioni studiate.

Italiano
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesia日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Utilizziamo i cookie per il funzionamento del sito, l'analisi e la personalizzazione. I dati vengono elaborati in conformità con la Politica sulla privacy.
accetta tutto personalizza rifiuta