Zmiana hasła w PHP
Zmiany hasła nie można po prostu zrobić w koncie osobistym. Chodzi o to, że użytkownik może zostawić swój komputer bez nadzoru (na przykład w biurze), będąc zalogowanym na naszej stronie. W tym przypadku, jeśli pozwolić po prostu zmieniać hasło, to złośliwy intruz-nieżyczliwiec będzie mógł zmienić hasło na inne, co, oczywiście, bardzo źle.
Należy zrobić tak, aby zmiana hasła na nowe wymagała wprowadzenia starego hasła.
Zaimplementujmy stronę changePassword.php,
po wejściu na którą użytkownik zobaczy formularz
z dwoma polami input - w pierwsze będzie musiał
wpisać swoje stare hasło, a w drugie - nowe:
<form action="" method="POST">
<input name="old_password">
<input name="new_password">
<input type="submit" name="submit">
</form>
Po naciśnięciu przycisku wysyłki powinniśmy zrobić następujące:
<?php
$id = $_SESSION['id']; // id użytkownika z sesji
$query = "SELECT * FROM users WHERE id='$id'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
$hash = $user['password']; // zasolone hasło z bazy danych
$oldPassword = $_POST['old_password'];
$newPassword = $_POST['new_password'];
// Sprawdzamy zgodność hasha z bazy z wprowadzonym starym hasłem
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 {
// stare hasło wprowadzone nieprawidłowo, wyświetlimy komunikat
}
?>
Zaimplementuj opisaną zmianę hasła.