Αλλαγή κωδικού πρόσβασης σε PHP
Η αλλαγή του κωδικού πρόσβασης δεν μπορεί απλά να γίνει στον προσωπικό λογαριασμό. Το θέμα είναι ότι ο χρήστης μπορεί να αφήσει τον υπολογιστή του χωρίς επίβλεψη (για παράδειγμα, στο γραφείο), ενώ είναι συνδεδεμένος στον ιστότοπό μας. Σε αυτήν την περίπτωση, εάν επιτραπεί απλή αλλαγή του κωδικού πρόσβασης, τότε ένας κακόβουλος-δυσμενής θα μπορούσε να αλλάξει τον κωδικό πρόσβασης σε άλλον, πράγμα που, φυσικά, είναι πολύ κακό.
Είναι απαραίτητο να γίνει έτσι, ώστε η αλλαγή του κωδικού πρόσβασης σε νέο να απαιτεί την εισαγωγή του παλιού κωδικού πρόσβασης.
Ας υλοποιήσουμε τη σελίδα changePassword.php,
επισκεπτόμενος την οποία ο χρήστης θα δει μια φόρμα
με δύο πεδία εισαγωγής - στο πρώτο θα πρέπει να
εισάγει τον παλιό του κωδικό πρόσβασης, και στο δεύτερο - τον νέο:
<form action="" method="POST">
<input name="old_password">
<input name="new_password">
<input type="submit" name="submit">
</form>
Πατώντας στο κουμπί αποστολής πρέπει να κάνουμε τα εξής:
<?php
$id = $_SESSION['id']; // id χρήστη από τη συνεδρία
$query = "SELECT * FROM users WHERE id='$id'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
$hash = $user['password']; // αλατισμένος κωδικός από τη ΒΔ
$oldPassword = $_POST['old_password'];
$newPassword = $_POST['new_password'];
// Ελέγχουμε την αντιστοιχία του hash από τη βάση δεδομένων με τον παλιό κωδικό που εισήχθη
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 {
// ο παλιός κωδικός πρόσβασης εισήχθη λανθασμένα, εμφανίζουμε μήνυμα
}
?>
Υλοποιήστε την περιγραφόμενη αλλαγή κωδικού πρόσβασης.