Sprememba gesla v PHP

Sprememba gesla ni mogoča preprosto v osebnem računu. Bistvo je v tem, da lahko uporabnik pusti svoj računalnik brez nadzora (na primer v pisarni), medtem ko je prijavljen na našo spletno stran. V tem primeru, če dovolimo preprosto spreminjanje gesla, lahko zlonamernik-nevšečnež spremeni geslo v drugo, kar je seveda zelo slabo.

Potrebno je narediti tako, da sprememba gesla na novo zahteva vnos starega gesla.

Implementirajmo stran changePassword.php, ob obisku katere bo uporabnik videl obrazec z dvema vnosnima poljema - v prvo mora vnesti svoje staro geslo, v drugo pa novo:

html<form action="" method="POST">
  <input name="old_password">
  <input name="new_password">
  <input type="submit" name="submit">
</form>

Ob kliku na gumb za pošiljanje moramo narediti naslednje:

html<?php
  $id = $_SESSION['id']; // id uporabnika iz seje
  $query = "SELECT * FROM users WHERE id='$id'";
  
  $res = mysqli_query($link, $query);
  $user = mysqli_fetch_assoc($res);
  
  $hash = $user['password']; // zgoščeno geslo iz baze podatkov
  $oldPassword = $_POST['old_password'];
  $newPassword = $_POST['new_password'];
  
  // Preverimo ujemanje zgoščene vrednosti iz baze z vnesenim starim geslom
  if (password_verify($oldPassword, $hash)) {
    $newPasswordHash = password_hash($newPassword, PASSWORD_DEFAULT);
    
    $query = "UPDATE users SET password='$newPasswordHash' WHERE id='$id'";
    mysqli_query($link, $query);
  } else {
    // staro geslo je napačno, izpišemo sporočilo
  }
?>
Задание 1

Implementirajte opisano spremembo gesla.