Só hozzáadása az autorizációhoz
Most meg kell változtatnunk az autorizációt. Itt már jelentősebbek lesznek a változások.
Már nem lesz lehetőség azonnal, egy lekérdezéssel ellenőrizni a bejelentkezési adatok helyességét. Miért: mert a jelszó ellenőrzéséhez meg kell kapnunk a sózott hash-ét, a só pedig az adatbázisban van tárolva és egyedi minden felhasználónévhez.
Először csak a felhasználónév alapján kell lekérnünk a rekordot, elolvasni a sót, megsózni a beírt jelszót és összehasonlítani az adatbázisból származó sózott jelszóval, és csak akkor, ha ezek egyeznek, - autorizálni a felhasználót.
Vegyük figyelembe, hogy előfordulhat, hogy a felhasználónevet nem jól írták be, ebben az esetben a jelszó ellenőrzése nem végezhető el, hanem azonnal ki lehet jelezni, hogy az autorizáció nem lehetséges - az adatok helytelenek:
<?php
$login = $_POST['login'];
$query = "SELECT * FROM users WHERE login='$login'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
if (!empty($user)) {
// van ilyen felhasználónévvel felhasználó, most ellenőrizni kell a jelszót...
} else {
// nincs ilyen felhasználónévvel felhasználó, kiírjuk az üzenetet
}
?>
Adjunk hozzá jelszó ellenőrzést:
<?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ó az adatbázisból
$hash = $user['password']; // sózott jelszó az adatbázisból
$password = md5($salt . $_POST['password']); // a felhasználó sózott jelszava
// Összehasonlítjuk a sózott hash-eket
if ($password == $hash) {
// minden rendben, autorizálunk...
} else {
// a jelszó nem megfelelő, kiírjuk az üzenetet
}
} else {
// nincs ilyen felhasználónévvel felhasználó, kiírjuk az üzenetet
}
?>
Biztonsági okokból a felhasználónak általában nem közlik, hogy pontosan mi nem stimmel - a felhasználónév vagy a jelszó, hogy megnehezítsék a felhasználónév-jelszó páros kitalálását a hackerektől. Egyszerűen kiírják, hogy a felhasználónév-jelszó páros helytelen, vagy valami hasonlót.
Valósítsa meg a fent leírt sózott jelszós autorizációt. Próbáljon meg regisztrálni, bejelentkezni, győződjön meg róla, hogy minden működik.