Só hozzáadása az autorizációhoz

Most meg kell változtatnunk az autorizációt. Itt már jelentősebbek lesznek a változások.

Már nem lesz lehetőség azonnal, egy lekérdezéssel ellenőrizni a bejelentkezési adatok helyességét. Miért: mert a jelszó ellenőrzéséhez meg kell kapnunk a sózott hash-ét, a só pedig az adatbázisban van tárolva és egyedi minden felhasználónévhez.

Először csak a felhasználónév alapján kell lekérnünk a rekordot, elolvasni a sót, megsózni a beírt jelszót és összehasonlítani az adatbázisból származó sózott jelszóval, és csak akkor, ha ezek egyeznek, - autorizálni a felhasználót.

Vegyük figyelembe, hogy előfordulhat, hogy a felhasználónevet nem jól írták be, ebben az esetben a jelszó ellenőrzése nem végezhető el, hanem azonnal ki lehet jelezni, hogy az autorizáció nem lehetséges - az adatok helytelenek:

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)) {
    // van ilyen felhasználónévvel felhasználó, most ellenőrizni kell a jelszót...
  } else {
    // nincs ilyen felhasználónévvel felhasználó, kiírjuk az üzenetet
  }
?>

Adjunk hozzá jelszó ellenőrzést:

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ó az adatbázisból
    $hash = $user['password']; // sózott jelszó az adatbázisból
    
    $password = md5($salt . $_POST['password']); // a felhasználó sózott jelszava
    
    // Összehasonlítjuk a sózott hash-eket
    if ($password == $hash) {
      // minden rendben, autorizálunk...
    } else {
      // a jelszó nem megfelelő, kiírjuk az üzenetet
    }
  } else {
    // nincs ilyen felhasználónévvel felhasználó, kiírjuk az üzenetet
  }
?>

Biztonsági okokból a felhasználónak általában nem közlik, hogy pontosan mi nem stimmel - a felhasználónév vagy a jelszó, hogy megnehezítsék a felhasználónév-jelszó páros kitalálását a hackerektől. Egyszerűen kiírják, hogy a felhasználónév-jelszó páros helytelen, vagy valami hasonlót.

Задание 1

Valósítsa meg a fent leírt sózott jelszós autorizációt. Próbáljon meg regisztrálni, bejelentkezni, győződjön meg róla, hogy minden működik.