Tilføjelse af salt til autorisation
Nu er vi nødt til at ændre autorisationen. Her vil ændringerne være mere væsentlige.
Det vil ikke længere være muligt at kontrollere korrektheden af parret login-adgangskode med det samme, med én forespørgsel. Hvorfor: fordi for at kontrollere adgangskoden, er vi nødt til at få dens saltede hash, og saltet opbevares i databasen og er unikt for hvert login.
Vi bliver nødt til først at hente posten kun ved login, læse saltet, salte den indtastede adgangskode og sammenligne med den saltede adgangskode fra databasen og kun hvis de matcher, - autorisere brugeren.
Husk på, at det kan ske, at login er indtastet forkert, i dette tilfælde kan adgangskodekontrol undlades, og vi kan straks vise, at autorisation ikke er mulig - dataene er forkerte:
<?php
$login = $_POST['login'];
$query = "SELECT * FROM users WHERE login='$login'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
if (!empty($user)) {
// der er en bruger med dette login, nu skal vi kontrollere adgangskoden...
} else {
// der er ingen bruger med dette login, vi viser en besked
}
?>
Lad os tilføje adgangskodekontrol:
<?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 adgangskode fra databasen
$password = md5($salt . $_POST['password']); // salted adgangskode fra brugeren
// Sammenligner de saltede hashes
if ($password == $hash) {
// alt er okay, autoriserer...
} else {
// adgangskoden passede ikke, vi viser en besked
}
} else {
// der er ingen bruger med dette login, vi viser en besked
}
?>
Af sikkerhedsmæssige årsager informerer man normalt ikke brugeren om, hvad der præcist ikke passede - login eller adgangskode, for at gøre det sværere at gætte login-adgangskode-par af hackere. Man viser blot en besked om, at parret login-adgangskode er forkert eller noget i den stil.
Implementer den ovenfor beskrevne autorisation med salted adgangskode. Prøv at registrer dig, log ind, og vær sikker på, at alt fungerer.