Авторизацияга туз кушиш
Энди бизга авторизацияни ўзгартириш керак. Бу ерда ўзгаришлар янада мухимрок бўлади.
Энди логин-парол жуфтлигининг тўғрилигини дарҳол, битта сўров билан текшириб бўлмайди. Нега: чунки, паролни текшириш учун унинг тузланган хешини олиш керак, туз эса маълумотлар базасида сақланади ва ҳар бир логин учун уникалдир.
Аввал фақат логин бўйича ёзувни олиш, тузни ўқиш, киритилган паролга туз кушиш ва базадан олинган тузланган парол билан солиштириш ва фақат, агар улар мос келса, - фойдаланувчини авторизациялаш керак бўлади.
Эътибор беринг, логин нотўғри киритилган ҳоллар ҳам бўлиши мумкин, бундай ҳолда паролни текшириш амалга оширилиши шарт эмас, дарҳол авторизация имконсиз - маълумотлар нотўғри деб чиқариш мумкин:
<?php
$login = $_POST['login'];
$query = "SELECT * FROM users WHERE login='$login'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
if (!empty($user)) {
// бундай логинли фойдаланувчи мавжуд, энди паролни текшириш керак...
} else {
// бундай логинли фойдаланувчи йўқ, хабар чиқарамиз
}
?>
Келинг, паролни текширишни қўшайлик:
<?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']; // БД дан туз
$hash = $user['password']; // БД дан тузланган парол
$password = md5($salt . $_POST['password']); // фойдаланувчи томонидан берилган тузланган парол
// Тузланган хешларни солиштирамиз
if ($password == $hash) {
// ҳаммаси яхши, авторизациялаймиз...
} else {
// парол тўғри келмади, хабар чиқарамиз
}
} else {
// бундай логинли фойдаланувчи йўқ, хабар чиқарамиз
}
?>
Хавфсизлик мақсадида фойдаланувчига ододда аниқ нима нотўғри - логинми ёки паролми, дейишмайди, чунки ҳакерлар томонидан логин-парол жуфтликларини топширишни қийинлаштириш учун. Оддийгина логин-парол жуфтлиги нотўғри ёки шуга ўхшаган хабар чиқарилади.
Юқорида тавсифланган тузланган парол билан авторизацияни амалга оширинг. Рўйҳатдан ўтиб кўринг, авторизациядан ўтинг, ҳаммаси ишлашига ишонч ҳосил қилинг.