Dodavanje soli u autorizaciju
Sada nam je potrebno da promenimo autorizaciju. Ovde će izmene već biti značajnije.
Više neće biti moguće proveriti tačnost para login-šifra odmah, jednim upitom. Zašto: zato što, da bi se proverila šifra, potrebno je da se dobije njen heš sa solju, a so se čuva u bazi podataka i jedinstvena je za svaki login.
Moraće se prvo dobiti zapis samo po loginu, pročitati so, posoliti unetu šifru i uporediti sa slanom šifrom iz baze i samo, ako se poklapaju, - autorizovati korisnika.
Imajte u vidu da može da se desi da je login unet pogrešno, u ovom slučaju proveru šifre ne treba sprovoditi, već odmah ispisati da autorizacija nije moguća - podaci nisu tačni:
<?php
$login = $_POST['login'];
$query = "SELECT * FROM users WHERE login='$login'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
if (!empty($user)) {
// korisnik sa takvim loginom postoji, sada treba proveriti šifru...
} else {
// korisnika sa takvim loginom nema, ispisaćemo poruku
}
?>
Dodajmo proveru šifre:
<?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']; // so iz baze
$hash = $user['password']; // slana šifra iz baze
$password = md5($salt . $_POST['password']); // slana šifra od korisnika
// Upoređujemo slane heševe
if ($password == $hash) {
// sve je u redu, autorizujemo...
} else {
// šifra nije odgovarala, ispisaćemo poruku
}
} else {
// korisnika sa takvim loginom nema, ispisaćemo poruku
}
?>
U cilju bezbednosti korisniku se obično ne saopštava šta tačno nije odgovaralo - login ili šifra, da bi se otežalo podbacivanje parova login-šifra hakerima. Jednostavno se ispisuje poruka da je par login-šifra netačan ili nešto u tom smislu.
Implementirajte gore opisanu autorizaciju sa slanom šifrom. Pokušajte da se registrujete, autorizujete, ubedite se da sve funkcioniše.