Дадаванне солі ў аўтарызацыю

Цяпер нам неабходна змяніць аўтарызацыю. Тут ужо змены будуць больш істотнымі.

Ужо не атрымаецца праверыць правільнасць пары лагін-пароль адразу ж, адным запытам. Чаму: таму што, каб праверыць пароль, трэба атрымаць яго салёны хэш, а соль захоўваецца ў базе даных і унікальная для кожнага лагіну.

Прыдзецца спачатку атрымаць запіс толькі па лагіну, прачытаць соль, пасаліць уведзены пароль і параўнаць з салёным паролем з базы і толькі, калі яны супадаюць, - аўтарызоўваць карыстальніка.

Улічыце, што можа такое быць, што лагін убіты няправільна, у гэтым выпадку праверку пароля можна не ажыццяўляць, а адразу вывесці, што аўтарызацыя не магчыма - даныя не верны:

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

Рэалізуйце апісаную вышэй аўтарызацыю з салёным паролем. Паспрабуйце зарэгіструйцеся, аўтарызуйцеся, упэўніцеся, што ўсё працуе.