Zmena hesla v PHP
Zmenu hesla nemožno jednoducho vykonať v osobnom priestore. Faktom je, že používateľ môže nechať svoj počítač bez dozoru (napríklad v kancelárii), pričom je autorizovaný na našej stránke. V tomto prípade, ak povolíme jednoducho meniť heslo, tak zlomyseľný útočník bude môcť zmeniť heslo na iné, čo je samozrejme veľmi zlé.
Je potrebné zabezpečiť, aby zmena hesla na nové vyžadovala zadanie starého hesla.
Poďme implementovať stránku changePassword.php,
na ktorej používateľ uvidí formulár
s dvoma inputmi - do prvého musí
zadať svoje staré heslo a do druhého - nové:
<form action="" method="POST">
<input name="old_password">
<input name="new_password">
<input type="submit" name="submit">
</form>
Po kliknutí na tlačidlo odoslania musíme urobiť nasledovné:
<?php
$id = $_SESSION['id']; // id používateľa z relácie
$query = "SELECT * FROM users WHERE id='$id'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
$hash = $user['password']; // soľané heslo z databázy
$oldPassword = $_POST['old_password'];
$newPassword = $_POST['new_password'];
// Kontrolujeme zhodu hash z databázy so zadaným starým heslom
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 {
// staré heslo bolo zadané nesprávne, vypíšeme správu
}
?>
Implementujte opísanú zmenu hesla.