Дадаванне солі ў аўтарызацыю
Цяпер нам неабходна змяніць аўтарызацыю. Тут ужо змены будуць больш істотнымі.
Ужо не атрымаецца праверыць правільнасць пары лагін-пароль адразу ж, адным запытам. Чаму: таму што, каб праверыць пароль, трэба атрымаць яго салёны хэш, а соль захоўваецца ў базе даных і унікальная для кожнага лагіну.
Прыдзецца спачатку атрымаць запіс толькі па лагіну, прачытаць соль, пасаліць уведзены пароль і параўнаць з салёным паролем з базы і толькі, калі яны супадаюць, - аўтарызоўваць карыстальніка.
Улічыце, што можа такое быць, што лагін убіты няправільна, у гэтым выпадку праверку пароля можна не ажыццяўляць, а адразу вывесці, што аўтарызацыя не магчыма - даныя не верны:
<?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 {
// карыстальніка з такім лагінам няма, вывядзем паведамленне
}
?>
У мэтах бяспекі карыстальніку звычайна не паведамляюць, што менавіта не падышло - лагін ці пароль, каб ускладніць падбор пар лагін-пароль хакерамі. Проста выводзяць паведамленне пра тое, што пара лагін-пароль няверная ці што-небудзь у такім родзе.
Рэалізуйце апісаную вышэй аўтарызацыю з салёным паролем. Паспрабуйце зарэгіструйцеся, аўтарызуйцеся, упэўніцеся, што ўсё працуе.