Dodajanje soli v avtorizacijo
Sedaj moramo spremeniti avtorizacijo. Tukaj bodo spremembe bolj bistvene.
Ne bo več mogoče takoj preveriti pravilnost para uporabniško ime-geslo z enim samim poizvedbo. Zakaj: ker, da bi preverili geslo, moramo pridobiti njegov zgoščenec s soljo, sol pa je shranjena v podatkovni bazi in je edinstvena za vsako uporabniško ime.
Najprej bomo morali pridobiti zapis samo po uporabniškem imenu, prebrati sol, dodati sol vnesenemu geslu in primerjati z zgoščenim geslom iz baze in šele, če se ujemata, - avtorizirati uporabnika.
Upoštevajte, da se lahko zgodi, da je uporabniško ime vneseno napačno, v tem primeru preverjanja gesla ni potrebno izvajati, lahko takoj izpišemo, da avtorizacija ni mogoča - podatki niso pravilni:
<?php
$login = $_POST['login'];
$query = "SELECT * FROM users WHERE login='$login'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
if (!empty($user)) {
// uporabnik s takšnim uporabniškim imenom obstaja, zdaj je treba preveriti geslo...
} else {
// uporabnik s takšnim uporabniškim imenom ne obstaja, izpišemo sporočilo
}
?>
Dodajmo preverjanje gesla:
<?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']; // sol iz podatkovne baze
$hash = $user['password']; // zgoščeno geslo s soljo iz podatkovne baze
$password = md5($salt . $_POST['password']); // zgoščeno geslo s soljo od uporabnika
// Primerjamo zgoščenca s soljo
if ($password == $hash) {
// vse je v redu, avtoriziramo...
} else {
// geslo se ni ujemalo, izpišemo sporočilo
}
} else {
// uporabnik s takšnim uporabniškim imenom ne obstaja, izpišemo sporočilo
}
?>
Zaradi varnosti uporabniku običajno ne sporočijo, kaj točno ni bilo pravilno - uporabniško ime ali geslo, da bi otežili iskanje parov uporabniško ime-geslo s strani hekerjev. Preprosto izpišejo sporočilo, da par uporabniško ime-geslo ni pravilen ali kaj podobnega.
Implementirajte zgoraj opisano avtorizacijo z geslom s soljo. Poskusite se registrirati, avtorizirajte se, prepričajte se, da vse deluje.