Dodajanje soli v avtorizacijo

Sedaj moramo spremeniti avtorizacijo. Tukaj bodo spremembe bolj bistvene.

Ne bo več mogoče takoj preveriti pravilnost para uporabniško ime-geslo z enim samim poizvedbo. Zakaj: ker, da bi preverili geslo, moramo pridobiti njegov zgoščenec s soljo, sol pa je shranjena v podatkovni bazi in je edinstvena za vsako uporabniško ime.

Najprej bomo morali pridobiti zapis samo po uporabniškem imenu, prebrati sol, dodati sol vnesenemu geslu in primerjati z zgoščenim geslom iz baze in šele, če se ujemata, - avtorizirati uporabnika.

Upoštevajte, da se lahko zgodi, da je uporabniško ime vneseno napačno, v tem primeru preverjanja gesla ni potrebno izvajati, lahko takoj izpišemo, da avtorizacija ni mogoča - podatki niso pravilni:

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)) {
    // uporabnik s takšnim uporabniškim imenom obstaja, zdaj je treba preveriti geslo...
  } else {
    // uporabnik s takšnim uporabniškim imenom ne obstaja, izpišemo sporočilo
  }
?>

Dodajmo preverjanje gesla:

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']; // sol iz podatkovne baze
    $hash = $user['password']; // zgoščeno geslo s soljo iz podatkovne baze
    
    $password = md5($salt . $_POST['password']); // zgoščeno geslo s soljo od uporabnika
    
    // Primerjamo zgoščenca s soljo
    if ($password == $hash) {
      // vse je v redu, avtoriziramo...
    } else {
      // geslo se ni ujemalo, izpišemo sporočilo
    }
  } else {
    // uporabnik s takšnim uporabniškim imenom ne obstaja, izpišemo sporočilo
  }
?>

Zaradi varnosti uporabniku običajno ne sporočijo, kaj točno ni bilo pravilno - uporabniško ime ali geslo, da bi otežili iskanje parov uporabniško ime-geslo s strani hekerjev. Preprosto izpišejo sporočilo, da par uporabniško ime-geslo ni pravilen ali kaj podobnega.

Задание 1

Implementirajte zgoraj opisano avtorizacijo z geslom s soljo. Poskusite se registrirati, avtorizirajte se, prepričajte se, da vse deluje.