Tilsetning av salt i autentisering
Nå må vi endre autentiseringen. Her vil endringene være mer betydelige.
Det vil ikke lenger være mulig å sjekke riktigheten av brukernavn-passord-paret med en gang, med én forespørsel. Hvorfor: fordi for å sjekke passordet, må man få den saltede hash-en, og saltet lagres i databasen og er unikt for hvert brukernavn.
Vi må først hente posten kun basert på brukernavnet, lese saltet, salte det innskrevne passordet og sammenligne med det saltede passordet fra databasen og bare, hvis de samsvarer, - autentisere brukeren.
Vær oppmerksom på at det kan hende at brukernavnet er skrevet feil, i så fall kan passordsjekken utelates, og man kan umiddelbart vise at autentisering ikke er mulig - dataene er ikke riktige:
<?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 finnes en bruker med dette brukernavnet, nå må passordet sjekkes...
} else {
// det finnes ingen bruker med dette brukernavnet, vis en melding
}
?>
La oss legge til passordsjekk:
<?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 fra databasen
$hash = $user['password']; // salted passord fra databasen
$password = md5($salt . $_POST['password']); // salted passord fra brukeren
// Sammenligner de saltede hash-ene
if ($password == $hash) {
// alt ok, autentiserer...
} else {
// passordet stemte ikke, vis en melding
}
} else {
// det finnes ingen bruker med dette brukernavnet, vis en melding
}
?>
Av sikkerhetshensyn informerer man vanligvis ikke brukeren om hva som ikke stemte - brukernavn eller passord, for å vanskeliggjøre gjetting av brukernavn-passord-par for hackere. Man viser ganske enkelt en melding om at brukernavn-passord-paret er feil eller noe i den duren.
Implementer autentiseringen med salted passord som beskrevet ovenfor. Prøv å registrer deg, logg inn, og forsikre deg om at alt fungerer.