Hash delle password in PHP
Memorizzare le password in testo chiaro non è corretto. Un hacker malintenzionato potrebbe ottenere l'accesso al tuo database e rubare le password.
Pertanto, di solito il nome utente viene memorizzato in testo
chiaro, mentre la password viene hashata con una funzione speciale
md5, che accetta come parametro la
password e restituisce il suo hash, dal quale
non è possibile risalire alla password originale.
Ad esempio, troviamo l'hash di una stringa:
<?php
echo md5('12345'); // visualizzerà '827ccb0eea8a706c4c34a16891f84e7b'
?>
Ora dobbiamo modificare la nostra procedura di registrazione e la nostra procedura di accesso. Per cominciare, consiglierei di svuotare la tabella degli utenti, poiché al momento contiene password in testo chiaro, mentre dovrebbero essere memorizzati i loro hash. Poi, durante il test della registrazione, la tabella verrà popolata con i dati nel nuovo formato.
Modifichiamo ora la nostra registrazione in modo che quando un nuovo utente viene salvato nel database, venga aggiunto non la password, ma il suo hash.
La modifica descritta sarà qualcosa del genere:
<?php
$login = $_POST['login'];
$password = md5($_POST['password']); // convertiamo la password nel suo hash
$query = "INSERT INTO users SET login='$login', password='$password'";
?>
Apportiamo modifiche simili per l'autenticazione:
<?php
$login = $_POST['login'];
$password = md5($_POST['password']); // convertiamo la password nel suo hash
$query = "SELECT * FROM users WHERE login='$login' AND password='$password'";
?>
Apporta le modifiche alla registrazione tenendo conto dell'hashing, registra un paio di nuovi utenti, assicurati che siano stati aggiunti al database con le password hashate.
Apporta le modifiche all'autenticazione tenendo conto dell'hashing, prova ad accedere con gli utenti registrati in precedenza.