Soola lisamine autoriseerimisse
Nüüd peame muutma autoriseerimist. Siin on muutused juba olulisemad.
Enam ei õnnestu kontrollida login-parooli paari õigsust kohe, ühe päringuga. Miks: selleks, et kontrollida parooli, tuleb saada selle soolatud räsi, kuid sool säilitatakse andmebaasis ja on unikaalne iga login jaoks.
Tuleb kõigepealt saada kirje ainult login-i alusel, lugeda sool, soolata sisestatud parool ja võrrelda soolatud parooliga andmebaasist ja ainult siis, kui need kattuvad, - autoriseerida kasutaja.
Pidage meeles, et võib juhtuda, et login on sisestatud valesti, sel juhul ei ole vaja parooli kontrollida, vaid võib kohe väljastada, et autoriseerimine ei ole võimalik - andmed on valed:
<?php
$login = $_POST['login'];
$query = "SELECT * FROM users WHERE login='$login'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
if (!empty($user)) {
// sellise loginiga kasutaja on olemas, nüüd tuleb kontrollida parooli...
} else {
// sellise loginiga kasutajat pole, kuvame teate
}
?>
Lisame parooli kontrolli:
<?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']; // sool andmebaasist
$hash = $user['password']; // soolatud parool andmebaasist
$password = md5($salt . $_POST['password']); // kasutaja soolatud parool
// Võrdleme soolatud räsisid
if ($password == $hash) {
// kõik korras, autoriseerime...
} else {
// parool ei sobinud, kuvame teate
}
} else {
// sellise loginiga kasutajat pole, kuvame teate
}
?>
Turvalisuse huvides ei teavita kasutajat tavaliselt sellest, mis täpselt ei sobinud - login või parool, et raskendada login-parooli paaride häkkimist. Lihtsalt kuvatakse teade sellest, et login-parooli paar on vale või midagi sarnast.
Rakendage ülalkirjeldatud soolatud parooliga autoriseerimine. Proovige registreeruda, logige sisse, veenduge, et kõik töötab.