Pridanie soli do autorizácie

Teraz musíme zmeniť autorizáciu. Tu už budú zmeny výraznejšie.

Už nebude možné okamžite, jednou požiadavkou overiť správnosť páru prihlasovacie meno-heslo. Prečo: pretože na overenie hesla je potrebné získať jeho soľaný hash, soľ je uložená v databáze a je unikátna pre každé prihlasovacie meno.

Najprv bude potrebné získať záznam len podľa prihlasovacieho mena, prečítať soľ, posoliť zadané heslo a porovnať so soľaným heslom z databázy a len v prípade, že sa zhodujú, - autorizovať používateľa.

Berte do úvahy, že sa môže stať, že prihlasovacie meno je zadané nesprávne, v tomto prípade overenie hesla je možné nevykonávať a okamžite vypísať, že autorizácia nie je možná - údaje sú nesprávne:

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)) {
    // používateľ s takýmto prihlasovacím menom existuje, teraz treba overiť heslo...
  } else {
    // používateľ s takýmto prihlasovacím menom neexistuje, vypíšeme správu
  }
?>

Pridajme overenie hesla:

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']; // soľ z databázy
    $hash = $user['password']; // soľané heslo z databázy
    
    $password = md5($salt . $_POST['password']); // soľané heslo od používateľa
    
    // Porovnávame soľané hashe
    if ($password == $hash) {
      // všetko v poriadku, autorizujeme...
    } else {
      // heslo nesedelo, vypíšeme správu
    }
  } else {
    // používateľ s takýmto prihlasovacím menom neexistuje, vypíšeme správu
  }
?>

Z bezpečnostných dôvodov sa používateľovi zvyčajne neoznamuje, čo konkrétne nesedelo - prihlasovacie meno alebo heslo, aby sa sťažil postupný výskyt párov prihlasovacie meno-heslo hackermi. Jednoducho sa zobrazí správa o tom, že pár prihlasovacie meno-heslo je nesprávny alebo niečo v tom zmysle.

Задание 1

Realizujte opísanú autorizáciu so soľaným heslom. Skúste sa zaregistrovať, prihlásiť, presvedčte sa, že všetko funguje.