Soola lisamine autoriseerimisse

Nüüd peame muutma autoriseerimist. Siin on muutused juba olulisemad.

Enam ei õnnestu kontrollida login-parooli paari õigsust kohe, ühe päringuga. Miks: selleks, et kontrollida parooli, tuleb saada selle soolatud räsi, kuid sool säilitatakse andmebaasis ja on unikaalne iga login jaoks.

Tuleb kõigepealt saada kirje ainult login-i alusel, lugeda sool, soolata sisestatud parool ja võrrelda soolatud parooliga andmebaasist ja ainult siis, kui need kattuvad, - autoriseerida kasutaja.

Pidage meeles, et võib juhtuda, et login on sisestatud valesti, sel juhul ei ole vaja parooli kontrollida, vaid võib kohe väljastada, et autoriseerimine ei ole võimalik - andmed on valed:

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)) {
    // sellise loginiga kasutaja on olemas, nüüd tuleb kontrollida parooli...
  } else {
    // sellise loginiga kasutajat pole, kuvame teate
  }
?>

Lisame parooli kontrolli:

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']; // sool andmebaasist
    $hash = $user['password']; // soolatud parool andmebaasist
    
    $password = md5($salt . $_POST['password']); // kasutaja soolatud parool
    
    // Võrdleme soolatud räsisid
    if ($password == $hash) {
      // kõik korras, autoriseerime...
    } else {
      // parool ei sobinud, kuvame teate
    }
  } else {
    // sellise loginiga kasutajat pole, kuvame teate
  }
?>

Turvalisuse huvides ei teavita kasutajat tavaliselt sellest, mis täpselt ei sobinud - login või parool, et raskendada login-parooli paaride häkkimist. Lihtsalt kuvatakse teade sellest, et login-parooli paar on vale või midagi sarnast.

Задание 1

Rakendage ülalkirjeldatud soolatud parooliga autoriseerimine. Proovige registreeruda, logige sisse, veenduge, et kõik töötab.