Dodavanje soli u autorizaciju

Sada nam je potrebno da promenimo autorizaciju. Ovde će izmene već biti značajnije.

Više neće biti moguće proveriti tačnost para login-šifra odmah, jednim upitom. Zašto: zato što, da bi se proverila šifra, potrebno je da se dobije njen heš sa solju, a so se čuva u bazi podataka i jedinstvena je za svaki login.

Moraće se prvo dobiti zapis samo po loginu, pročitati so, posoliti unetu šifru i uporediti sa slanom šifrom iz baze i samo, ako se poklapaju, - autorizovati korisnika.

Imajte u vidu da može da se desi da je login unet pogrešno, u ovom slučaju proveru šifre ne treba sprovoditi, već odmah ispisati da autorizacija nije moguća - podaci nisu tačni:

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)) {
    // korisnik sa takvim loginom postoji, sada treba proveriti šifru...
  } else {
    // korisnika sa takvim loginom nema, ispisaćemo poruku
  }
?>

Dodajmo proveru šifre:

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 iz baze
    $hash = $user['password']; // slana šifra iz baze
    
    $password = md5($salt . $_POST['password']); // slana šifra od korisnika
    
    // Upoređujemo slane heševe
    if ($password == $hash) {
      // sve je u redu, autorizujemo...
    } else {
      // šifra nije odgovarala, ispisaćemo poruku
    }
  } else {
    // korisnika sa takvim loginom nema, ispisaćemo poruku
  }
?>

U cilju bezbednosti korisniku se obično ne saopštava šta tačno nije odgovaralo - login ili šifra, da bi se otežalo podbacivanje parova login-šifra hakerima. Jednostavno se ispisuje poruka da je par login-šifra netačan ili nešto u tom smislu.

Задание 1

Implementirajte gore opisanu autorizaciju sa slanom šifrom. Pokušajte da se registrujete, autorizujete, ubedite se da sve funkcioniše.