Přidání soli do autorizace
Nyní musíme změnit autorizaci. Zde již budou změny podstatnější.
Už nebude možné okamžitě, jedním dotazem, ověřit správnost dvojice login-heslo. Proč: protože pro ověření hesla je nutné získat jeho solený hash, a sůl je uložena v databázi a je unikátní pro každý login.
Nejprve bude nutné získat záznam pouze podle loginu, přečíst sůl, přisolit zadané heslo a porovnat se soleným heslem z databáze a teprve, pokud se shodují, - autorizovat uživatele.
Počítejte s tím, že se může stát, že login je zadán nesprávně, v tomto případě lze ověření hesla neuskutečnit a okamžitě vypsat, že autorizace není možná - údaje nejsou správné:
<?php
$login = $_POST['login'];
$query = "SELECT * FROM users WHERE login='$login'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
if (!empty($user)) {
// uživatel s takovým loginem existuje, nyní je třeba ověřit heslo...
} else {
// uživatel s takovým loginem neexistuje, vypíšeme zprávu
}
?>
Přidejme ověření hesla:
<?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']; // sůl z DB
$hash = $user['password']; // solené heslo z DB
$password = md5($salt . $_POST['password']); // solené heslo od uživatele
// Porovnáváme solené hashe
if ($password == $hash) {
// vše v pořádku, autorizujeme...
} else {
// heslo nesedí, vypíšeme zprávu
}
} else {
// uživatel s takovým loginem neexistuje, vypíšeme zprávu
}
?>
Z bezpečnostních důvodů se uživateli obvykle nesděluje, co konkrétně nesedělo - login nebo heslo, aby se ztížil hackerský výběr párů login-heslo. Jednoduše se zobrazí zpráva o tom, že dvojice login-heslo je nesprávná nebo něco takového.
Realizujte výše popsanou autorizaci se soleným heslem. Zkuste se zaregistrovat, přihlásit, ujistěte se, že vše funguje.