Додавање на сол во авторизација
Сега ни е потребно да ја смениме авторизацијата. Овде веќе промените ќе бидат позначајни.
Веќе нема да може да се провери исправноста на парот логин-лозинка веднаш, со еден барање. Зошто: бидејќи, за да се провери лозинката, треба да се добие нејзиниот солен хеш, а солта се чува во базата на податоци и е уникатна за секој логин.
Ќе мора прво да се добие записот само по логинот, да се прочита солта, да се посоли внесената лозинка и да се спореди со солената лозинка од базата и само, ако тие се совпаѓаат, - да се авторизира корисникот.
Имајте предвид дека може да се случи така што логинот е внесен погрешно, во овој случај проверката на лозинката не треба да се извршува, туку веднаш да се прикаже дека авторизацијата не е можна - податоците не се точни:
<?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 {
// корисник со таков логин не постои, ќе прикажеме порака
}
?>
Во интереси на безбедноста, на корисникот обично не му се соопштува што точно не одговара - логинот или лозинката, за да се отежне пребарувањето на парот логин-лозинка од хакери. Едноставно се прикажува порака за тоа дека парот логин-лозинка е неточен или нешто слично.
Имплементирајте ја опишаната погоре авторизација со солена лозинка. Обидете се да се регистрирате, најавете се, уверете се дека сè функционира.