Změna hesla v PHP
Změnu hesla nelze jednoduše provést v osobním účtu. Jde o to, že uživatel může nechat svůj počítač bez dozoru (například v kanceláři), zatímco je přihlášen na našem webu. V tomto případě, pokud povolíme jednoduše měnit heslo, tak útočník-nepřítel bude moci změnit heslo na jiné, což samozřejmě velmi špatné.
Je nutné zařídit, aby změna hesla na nové vyžadovala zadání starého hesla.
Pojďme implementovat stránku changePassword.php,
na kterou když uživatel přejde, uvidí formulář
se dvěma inputy - do prvního bude muset
zadat své 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 stisknutí tlačítka odeslání musíme provést následující:
<?php
$id = $_SESSION['id']; // id uživatele ze session
$query = "SELECT * FROM users WHERE id='$id'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
$hash = $user['password']; // solené heslo z DB
$oldPassword = $_POST['old_password'];
$newPassword = $_POST['new_password'];
// Kontrolujeme shodu hashe z databáze se zadaným starým heslem
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 bylo zadáno nesprávně, vypíšeme zprávu
}
?>
Implementujte popsanou změnu hesla.