Προσθήκη αλατιού στην εξουσιοδότηση

Τώρα πρέπει να αλλάξουμε την εξουσιοδότηση. Εδώ οι αλλαγές θα είναι πιο σημαντικές.

Δεν είναι πλέον δυνατόν να ελεγχθεί η ορθότητα του ζευγαριού όνομα σύνδεσης-κωδικού αμέσως, με ένα αίτημα. Γιατί: για να ελεγχθεί ο κωδικός πρόσβασης, πρέπει να ληφθεί το αλατισμένο hash του, και το αλάτι αποθηκεύεται στη βάση δεδομένων και είναι μοναδικό για κάθε όνομα σύνδεσης.

Θα πρέπει πρώτα να ληφθεί η εγγραφή μόνο από το όνομα σύνδεσης, να διαβαστεί το αλάτι, να αλατιστεί ο κωδικός που εισήχθη και να συγκριθεί με τον αλατισμένο κωδικό από τη βάση και μόνο, εάν ταιριάζουν, - να εξουσιοδοτηθεί ο χρήστης.

Λάβετε υπόψη ότι μπορεί να συμβεί ότι το όνομα σύνδεσης πληκτρολογήθηκε λανθασμένα, σε αυτήν την περίπτωση ο έλεγχος του κωδικού πρόσβασης δεν μπορεί να πραγματοποιηθεί, αλλά να εμφανιστεί αμέσως ότι η εξουσιοδότηση δεν είναι δυνατή - τα δεδομένα δεν είναι σωστά:

html<?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 {
    // δεν υπάρχει χρήστης με αυτό το όνομα σύνδεσης, εμφανίστε μήνυμα
  }
?>

Ας προσθέσουμε τον έλεγχο κωδικού πρόσβασης:

html<?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 {
    // δεν υπάρχει χρήστης με αυτό το όνομα σύνδεσης, εμφανίστε μήνυμα
  }
?>

Για λόγους ασφαλείας, συνήθως δεν ενημερώνεται ο χρήστης για το τι ακριβώς δεν ταίριαξε - το όνομα σύνδεσης ή ο κωδικός πρόσβασης, για να δυσκολέψει την εικασία ζευγαριών όνομα σύνδεσης-κωδικού από χάκερς. Απλά εμφανίζουν ένα μήνυμα ότι το ζεύγος όνομα σύνδεσης-κωδικού είναι λανθασμένο ή κάτι παρόμοιο.

Задание 1

Υλοποιήστε την παραπάνω εξουσιοδότηση με αλατισμένο κωδικό. Προσπαθήστε να εγγραφείτε, να συνδεθείτε, βεβαιωθείτε ότι όλα λειτουργούν.