Προσθήκη αλατιού στην εξουσιοδότηση
Τώρα πρέπει να αλλάξουμε την εξουσιοδότηση. Εδώ οι αλλαγές θα είναι πιο σημαντικές.
Δεν είναι πλέον δυνατόν να ελεγχθεί η ορθότητα του ζευγαριού όνομα σύνδεσης-κωδικού αμέσως, με ένα αίτημα. Γιατί: για να ελεγχθεί ο κωδικός πρόσβασης, πρέπει να ληφθεί το αλατισμένο hash του, και το αλάτι αποθηκεύεται στη βάση δεδομένων και είναι μοναδικό για κάθε όνομα σύνδεσης.
Θα πρέπει πρώτα να ληφθεί η εγγραφή μόνο από το όνομα σύνδεσης, να διαβαστεί το αλάτι, να αλατιστεί ο κωδικός που εισήχθη και να συγκριθεί με τον αλατισμένο κωδικό από τη βάση και μόνο, εάν ταιριάζουν, - να εξουσιοδοτηθεί ο χρήστης.
Λάβετε υπόψη ότι μπορεί να συμβεί ότι το όνομα σύνδεσης πληκτρολογήθηκε λανθασμένα, σε αυτήν την περίπτωση ο έλεγχος του κωδικού πρόσβασης δεν μπορεί να πραγματοποιηθεί, αλλά να εμφανιστεί αμέσως ότι η εξουσιοδότηση δεν είναι δυνατή - τα δεδομένα δεν είναι σωστά:
<?php
$login = $_POST['login'];
$query = "SELECT * FROM users WHERE login='$login'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
if (!empty($user)) {
// υπάρχει χρήστης με αυτό το όνομα σύνδεσης, τώρα πρέπει να ελεγχθεί ο κωδικός...
} else {
// δεν υπάρχει χρήστης με αυτό το όνομα σύνδεσης, εμφανίστε μήνυμα
}
?>
Ας προσθέσουμε τον έλεγχο κωδικού πρόσβασης:
<?php
$login = $_POST['login'];
$query = "SELECT * FROM users WHERE login='$login'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
if (!empty($user)) {
$salt = $user['salt']; // αλάτι από τη ΒΔ
$hash = $user['password']; // αλατισμένος κωδικός από τη ΒΔ
$password = md5($salt . $_POST['password']); // αλατισμένος κωδικός από τον χρήστη
// Συγκρίνουμε τα αλατισμένα hashes
if ($password == $hash) {
// όλα εντάξει, εξουσιοδοτούμε...
} else {
// ο κωδικός πρόσβασης δεν ταίριαξε, εμφανίστε μήνυμα
}
} else {
// δεν υπάρχει χρήστης με αυτό το όνομα σύνδεσης, εμφανίστε μήνυμα
}
?>
Για λόγους ασφαλείας, συνήθως δεν ενημερώνεται ο χρήστης για το τι ακριβώς δεν ταίριαξε - το όνομα σύνδεσης ή ο κωδικός πρόσβασης, για να δυσκολέψει την εικασία ζευγαριών όνομα σύνδεσης-κωδικού από χάκερς. Απλά εμφανίζουν ένα μήνυμα ότι το ζεύγος όνομα σύνδεσης-κωδικού είναι λανθασμένο ή κάτι παρόμοιο.
Υλοποιήστε την παραπάνω εξουσιοδότηση με αλατισμένο κωδικό. Προσπαθήστε να εγγραφείτε, να συνδεθείτε, βεβαιωθείτε ότι όλα λειτουργούν.