Додавање на сол во авторизација

Сега ни е потребно да ја смениме авторизацијата. Овде веќе промените ќе бидат позначајни.

Веќе нема да може да се провери исправноста на парот логин-лозинка веднаш, со еден барање. Зошто: бидејќи, за да се провери лозинката, треба да се добие нејзиниот солен хеш, а солта се чува во базата на податоци и е уникатна за секој логин.

Ќе мора прво да се добие записот само по логинот, да се прочита солта, да се посоли внесената лозинка и да се спореди со солената лозинка од базата и само, ако тие се совпаѓаат, - да се авторизира корисникот.

Имајте предвид дека може да се случи така што логинот е внесен погрешно, во овој случај проверката на лозинката не треба да се извршува, туку веднаш да се прикаже дека авторизацијата не е можна - податоците не се точни:

html<?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 {
    // корисник со таков логин не постои, ќе прикажеме порака
  }
?>

Ајде да додадеме проверка на лозинката:

html<?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 {
    // корисник со таков логин не постои, ќе прикажеме порака
  }
?>

Во интереси на безбедноста, на корисникот обично не му се соопштува што точно не одговара - логинот или лозинката, за да се отежне пребарувањето на парот логин-лозинка од хакери. Едноставно се прикажува порака за тоа дека парот логин-лозинка е неточен или нешто слично.

Задание 1

Имплементирајте ја опишаната погоре авторизација со солена лозинка. Обидете се да се регистрирате, најавете се, уверете се дека сè функционира.