Salasanan vaihto PHP:llä
Salasanan vaihtoa ei voi yksinkertaisesti tehdä henkilökohtaisessa tilissä. Asia on niin, että käyttäjä voi jättää tietokoneensa vailla huomiota (esimerkiksi toimistolla), ollessaan kirjautuneena sivustollemme. Tässä tilanteessa, jos sallii salasanan yksinkertaisen vaihtamisen, voi pahantahtoinen uhkaaja vaihtaa salasanan toiseen, mikä tietysti on erittäin huono asia.
On tarpeen tehdä niin, että salasanan vaihto uuteen edellyttää vanhan salasanan syöttämistä.
Toteutetaan sivu changePassword.php,
jolle kirjautunut käyttäjä näkee lomakkeen
kahdella kentällä - ensimmäiseen hänen tulee
syöttää vanha salasansa, ja toiseen - uusi:
<form action="" method="POST">
<input name="old_password">
<input name="new_password">
<input type="submit" name="submit">
</form>
Lähetyspainiketta painettaessa meidän on tehtävä seuraavaa:
<?php
$id = $_SESSION['id']; // käyttäjän id istunnosta
$query = "SELECT * FROM users WHERE id='$id'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
$hash = $user['password']; // suolattu salasana tietokannasta
$oldPassword = $_POST['old_password'];
$newPassword = $_POST['new_password'];
// Tarkistetaan tietokannan hashin vastaavuus syötettyyn vanhaan salasanaan
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 {
// vanha salasana syötetty väärin, näytetään viesti
}
?>
Toteuta kuvattu salasanan vaihto.