Promena lozinke na PHP
Promenu lozinke ne možemo jednostavno omogućiti u ličnom nalogu. Stvar je u tome što korisnik može ostaviti svoj računar bez nadzora (na primer, u kancelariji), budući da je autorizovan na našem sajtu. U tom slučaju, ako dozvolimo jednostavnu promenu lozinke, onda zlonameran napadač može promeniti lozinku na neku drugu, što je, naravno, vrlo loše.
Neophodno je da promena lozinke na novu zahteva unos stare lozinke.
Hajde da implementiramo stranicu changePassword.php,
na koju će korisnik, kada uđe, videti formu
sa dva polja - u prvo treba da
unese svoju staru lozinku, a u drugo - novu:
<form action="" method="POST">
<input name="old_password">
<input name="new_password">
<input type="submit" name="submit">
</form>
Klikom na dugme za slanje treba da uradimo sledeće:
<?php
$id = $_SESSION['id']; // id korisnika iz sesije
$query = "SELECT * FROM users WHERE id='$id'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
$hash = $user['password']; // soljena lozinka iz baze
$oldPassword = $_POST['old_password'];
$newPassword = $_POST['new_password'];
// Proveravamo podudarnost heša iz baze sa unetom starom lozinkom
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 {
// stara lozinka je pogrešno uneta, prikazaćemo poruku
}
?>
Implementirajte opisanu promenu lozinke.