Sāls pievienošana autorizācijā
Tagad mums ir jāmaina autorizācija. Šeit izmaiņas jau būs būtiskākas.
Vairs neizdosies uzreiz ar vienu vaicājumu pārbaudīt lietotājvārda un paroles pāra pareizību. Kāpēc: tāpēc, ka, lai pārbaudītu paroli, ir jāiegūst tās sālītais hešs, bet sāls tiek glabāta datu bāzē un ir unikāla katram lietotājvārdam.
Vispirms būs jāiegūst ieraksts tikai pēc lietotājvārda, jānolasa sāls, jāpievieno sāls ievadītajai parolei un jāsalīdzina ar sālīto paroli no datu bāzes, un tikai, ja tie sakrīt, - autorizēt lietotāju.
Ņemiet vērā, ka var būt tā, ka lietotājvārds ir ievadīts nepareizi, šajā gadījumā paroles pārbaudi var neveikt, bet uzreiz izvadīt, ka autorizācija nav iespējama - dati nav pareizi:
<?php
$login = $_POST['login'];
$query = "SELECT * FROM users WHERE login='$login'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
if (!empty($user)) {
// lietotājs ar šādu lietotājvārdu pastāv, tagad jāpārbauda parole...
} else {
// lietotāja ar šādu lietotājvārdu nav, izvadīsim ziņojumu
}
?>
Pievienosim paroles pārbaudi:
<?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āls no DB
$hash = $user['password']; // sālītā parole no DB
$password = md5($salt . $_POST['password']); // sālītā parole no lietotāja
// Salīdzinām sālītos hešus
if ($password == $hash) {
// viss kārtībā, autorizējam...
} else {
// parole neder, izvadīsim ziņojumu
}
} else {
// lietotāja ar šādu lietotājvārdu nav, izvadīsim ziņojumu
}
?>
Drošības nolūkos lietotājam parasti nesaziņo, kas tieši nederēja - lietotājvārds vai parole, lai apgrūtinātu iespējamo lietotājvārdu un paroļu pāru atlasi hakeriem. Vienkārši izvada ziņojumu par to, ka lietotājvārda un paroles pāris ir nepareizs vai kaut kas līdzīgs.
Realizējiet iepriekš aprakstīto autorizāciju ar sālītu paroli. Mēģiniet reģistrēties, autorizējieties, pārliecinieties, ka viss darbojas.