Att lägga till salt i autentisering
Nu måste vi ändra autentiseringen. Här kommer förändringarna att vara mer betydande.
Det kommer inte längre att vara möjligt att kontrollera korrektheten av login-lösenordet direkt, med en förfrågan. Varför: för att kontrollera lösenordet måste man få dess saltade hash, och saltet lagras i databasen och är unikt för varje login.
Man måste först hämta posten endast med login, läsa saltet, salta det inmatade lösenordet och jämföra med det saltade lösenordet från databasen och först om de matchar, autentisera användaren.
Tänk på att det kan hända att loginet är skrivet felaktigt, i så fall kan lösenordskontrollen utebli, och man kan omedelbart visa att autentisering inte är möjlig - uppgifterna är felaktiga:
<?php
$login = $_POST['login'];
$query = "SELECT * FROM users WHERE login='$login'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
if (!empty($user)) {
// det finns en användare med detta login, nu måste lösenordet kontrolleras...
} else {
// det finns ingen användare med detta login, visa meddelande
}
?>
Låt oss lägga till lösenordskontroll:
<?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']; // salt från databasen
$hash = $user['password']; // saltat lösenord från databasen
$password = md5($salt . $_POST['password']); // saltat lösenord från användaren
// Jämför de saltade hashen
if ($password == $hash) {
// allt ok, autentiserar...
} else {
// lösenordet matchade inte, visa meddelande
}
} else {
// det finns ingen användare med detta login, visa meddelande
}
?>
Av säkerhetsskäl brukar användaren vanligtvis inte informeras om vad exakt som inte stämde - loginet eller lösenordet, för att göra det svårare att knäcka login-lösenordspar för hackare. Man visar helt enkelt ett meddelande om att login-lösenordsparet är felaktigt eller något i den stilen.
Implementera autentiseringen med saltat lösenord som beskrivs ovan. Försök registrera er, logga in, se till att allt fungerar.