Aggiunta del sale nell'autorizzazione

Ora dobbiamo modificare l'autorizzazione. Qui i cambiamenti saranno più sostanziali.

Non sarà più possibile verificare la correttezza della coppia login-password immediatamente, con una sola query. Perché: perché, per verificare la password, è necessario ottenere il suo hash salato, e il sale è memorizzato nel database ed è unico per ogni login.

Bisognerà prima ottenere il record solo per login, leggere il sale, "salare" la password inserita e confrontarla con la password salata dal database e solo, se coincidono, - autorizzare l'utente.

Si tenga presente che può succedere che il login sia digitato in modo errato, in questo caso la verifica della password non può essere effettuata, e si può immediatamente mostrare che l'autorizzazione non è possibile - i dati non sono corretti:

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)) {
    // esiste un utente con questo login, ora bisogna verificare la password...
  } else {
    // non esiste un utente con questo login, mostriamo un messaggio
  }
?>

Aggiungiamo la verifica della password:

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']; // sale dal DB
    $hash = $user['password']; // password salata dal DB
    
    $password = md5($salt . $_POST['password']); // password salata dall'utente
    
    // Confrontiamo gli hash salati
    if ($password == $hash) {
      // tutto ok, autorizziamo...
    } else {
      // la password non corrisponde, mostriamo un messaggio
    }
  } else {
    // non esiste un utente con questo login, mostriamo un messaggio
  }
?>

Per motivi di sicurezza all'utente di solito non viene comunicato cosa esatto non ha funzionato - il login o la password, per rendere più difficile l'indovinare le coppie login-password da parte degli hacker. Viene semplicemente mostrato un messaggio che la coppia login-password non è corretta o qualcosa del genere.

Задание 1

Implementate l'autorizzazione descritta sopra con la password salata. Provate a registrarvi, autenticatevi, assicuratevi che tutto funzioni.