Varnost uporabniških podatkov je na prvem mestu. Najpomembnejše pravilo pri delu z gesli je: Nikoli ne shranjujte gesel v bazo kot navadno besedilo! Če bi nekdo vdrl v vašo bazo, bi videl vsa gesla vaših uporabnikov.
Zakaj ne uporabljati MD5 ali SHA1?
Stari načini, kot sta MD5 ali SHA1, so danes prepočasni in preveč ranljivi. Sodobni računalniki lahko v nekaj sekundah uganejo milijone takšnih gesel s pomočjo "rainbow tabel".
Sodobna rešitev: password_hash()
PHP ponuja vgrajeno funkcijo password_hash(), ki uporablja močan algoritem (privzeto Bcrypt). Ta funkcija avtomatsko poskrbi za t.i. "salt" (soljenje), kar pomeni, da bo rezultat za isto geslo vsakič drugačen.
// Shranjevanje gesla v bazo
$geslo = "mojeVarnoGeslo123";
$hash = password_hash($geslo, PASSWORD_DEFAULT);
// Rezultat bo dolg niz znakov, ki ga shranite v MySQL stolpec (VARCHAR 255)
echo $hash;
Preverjanje gesla pri vpisu
Ko se uporabnik želi vpisati, ne morete preprosto primerjati dveh gesel. Uporabiti morate funkcijo password_verify().
// Preverjanje ob vpisu
$vpisano_geslo = "mojeVarnoGeslo123";
$hash_iz_baze = "...vsebina_iz_baze...";
if (password_verify($vpisano_geslo, $hash_iz_baze)) {
echo "Geslo je pravilno!";
} else {
echo "Napačno geslo!";
}
Več o password_hash si lahko preberete v moji vadnici na povezavi password_hash.