Shtimi i kripës në autorizim

Tani na duhet të ndryshojmë autorizimin. Këtu ndryshimet do të jenë më të rëndësishme.

Nuk do të jetë më e mundur të kontrollosh saktësinë e çiftit login-fjalëkalim menjëherë, me një kërkesë të vetme. Pse: sepse, për të kontrolluar fjalëkalimin, duhet të marrësh hash-in e tij të kripur, dhe kripa ruhet në bazën e të dhënave dhe është unike për çdo login.

Do të duhet që fillimisht të marrësh regjistrimin vetëm nga login-i, të lexosh kripën, ta kripësh fjalëkalimin e futur dhe ta krahasosh me fjalëkalimin e kripur nga baza dhe vetëm, nëse përputhen, - të autorizosh përdoruesit.

Kini parasysh se mund të ndodhë që login-i të jetë shkruar gabim, në këtë rast kontrollimi i fjalëkalimit nuk mund të kryhet, por menjëherë duhet të tregohet se autorizimi nuk është i mundur - të dhënat nuk janë të sakta:

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)) {
    // ka një përdorues me këtë login, tani duhet të kontrollohet fjalëkalimi...
  } else {
    // nuk ka përdorues me këtë login, do të shfaqim një mesazh
  }
?>

Le të shtojmë kontrollin e fjalëkalimit:

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']; // kripa nga DB
    $hash = $user['password']; // fjalëkalimi i kripur nga DB
    
    $password = md5($salt . $_POST['password']); // fjalëkalimi i kripur nga përdoruesi
    
    // Krahasojmë hash-et e kripur
    if ($password == $hash) {
      // gjithçka në rregull, autorizojmë...
    } else {
      // fjalëkalimi nuk përputhet, do të shfaqim një mesazh
    }
  } else {
    // nuk ka përdorues me këtë login, do të shfaqim një mesazh
  }
?>

Për arsye sigurie, përdoruesit zakonisht nuk i tregohet se çfarë saktësisht nuk përputhet - login-i apo fjalëkalimi, për ta ndërlikuar përpilimin e çifteve login-fjalëkalim nga hakerët. Thjesht shfaqet një mesazh se çifti login-fjalëkalim është i pasaktë ose diçka e tillë.

Задание 1

Implementoni autorizimin e përshkruar më sipër me fjalëkalim të kripur. Provoni të regjistroheni, autorizohuni, verifikoni që gjithçka funksionon.