Aggiunta del sale nell'autorizzazione
Ora dobbiamo modificare l'autorizzazione. Qui i cambiamenti saranno più sostanziali.
Non sarà più possibile verificare la correttezza della coppia login-password immediatamente, con una sola query. Perché: perché, per verificare la password, è necessario ottenere il suo hash salato, e il sale è memorizzato nel database ed è unico per ogni login.
Bisognerà prima ottenere il record solo per login, leggere il sale, "salare" la password inserita e confrontarla con la password salata dal database e solo, se coincidono, - autorizzare l'utente.
Si tenga presente che può succedere che il login sia digitato in modo errato, in questo caso la verifica della password non può essere effettuata, e si può immediatamente mostrare che l'autorizzazione non è possibile - i dati non sono corretti:
<?php
$login = $_POST['login'];
$query = "SELECT * FROM users WHERE login='$login'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
if (!empty($user)) {
// esiste un utente con questo login, ora bisogna verificare la password...
} else {
// non esiste un utente con questo login, mostriamo un messaggio
}
?>
Aggiungiamo la verifica della password:
<?php
$login = $_POST['login'];
$query = "SELECT * FROM users WHERE login='$login'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
if (!empty($user)) {
$salt = $user['salt']; // sale dal DB
$hash = $user['password']; // password salata dal DB
$password = md5($salt . $_POST['password']); // password salata dall'utente
// Confrontiamo gli hash salati
if ($password == $hash) {
// tutto ok, autorizziamo...
} else {
// la password non corrisponde, mostriamo un messaggio
}
} else {
// non esiste un utente con questo login, mostriamo un messaggio
}
?>
Per motivi di sicurezza all'utente di solito non viene comunicato cosa esatto non ha funzionato - il login o la password, per rendere più difficile l'indovinare le coppie login-password da parte degli hacker. Viene semplicemente mostrato un messaggio che la coppia login-password non è corretta o qualcosa del genere.
Implementate l'autorizzazione descritta sopra con la password salata. Provate a registrarvi, autenticatevi, assicuratevi che tutto funzioni.