Přidání soli do autorizace

Nyní musíme změnit autorizaci. Zde již budou změny podstatnější.

Už nebude možné okamžitě, jedním dotazem, ověřit správnost dvojice login-heslo. Proč: protože pro ověření hesla je nutné získat jeho solený hash, a sůl je uložena v databázi a je unikátní pro každý login.

Nejprve bude nutné získat záznam pouze podle loginu, přečíst sůl, přisolit zadané heslo a porovnat se soleným heslem z databáze a teprve, pokud se shodují, - autorizovat uživatele.

Počítejte s tím, že se může stát, že login je zadán nesprávně, v tomto případě lze ověření hesla neuskutečnit a okamžitě vypsat, že autorizace není možná - údaje nejsou správné:

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)) {
    // uživatel s takovým loginem existuje, nyní je třeba ověřit heslo...
  } else {
    // uživatel s takovým loginem neexistuje, vypíšeme zprávu
  }
?>

Přidejme ověření 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']; // sůl z DB
    $hash = $user['password']; // solené heslo z DB
    
    $password = md5($salt . $_POST['password']); // solené heslo od uživatele
    
    // Porovnáváme solené hashe
    if ($password == $hash) {
      // vše v pořádku, autorizujeme...
    } else {
      // heslo nesedí, vypíšeme zprávu
    }
  } else {
    // uživatel s takovým loginem neexistuje, vypíšeme zprávu
  }
?>

Z bezpečnostních důvodů se uživateli obvykle nesděluje, co konkrétně nesedělo - login nebo heslo, aby se ztížil hackerský výběr párů login-heslo. Jednoduše se zobrazí zpráva o tom, že dvojice login-heslo je nesprávná nebo něco takového.

Задание 1

Realizujte výše popsanou autorizaci se soleným heslem. Zkuste se zaregistrovat, přihlásit, ujistěte se, že vše funguje.