Sooli lisamine registreerimisel
Niisiis, te juba teate, et räsimine läbi
md5 - on pöördumatu protsess ja häkker,
kes saab juurdepääsu räsile, ei saa selle
räsi abil parooli tagasi saada.
Tegelikult ei ole see väide täiesti õige - praegu on pahad häkrid koostanud populaarsete ja mitte nii populaarsete paroolide räside raamatukogud ja iga hull saab parooli ära arvata, lihtsalt otsides selle räsi Google'ist.
Jutt on piisavalt lihtsatest, populaarsetest paroolidest.
Otsige Google'ist näiteks räsi 827ccb0eea8a706c4c34a16891f84e7b
ja kohe Google'i otsingus näete, et see on
parool '12345'.
Piisavalt keeruliste paroolide räsisid sellisel viisil ära arvata ei saa (proovige).
Te võite küsida, mis siis probleem on - paneme kõik end registreerima keeruliste paroolidega. Siiski on probleem olemas - enamik kasutajaid ei mõtle oma andmete turvalisusele ja võivad sisestada piisavalt lihtsaid paroole.
Me võime registreerumisel sundida kasutajaid
leiutama pikemaid paroole, piirades näiteks
minimaalset sümbolite arvu 6 või
8-ga, kuid siiski tekivad paroolid
nagu '123456' või '12345678'.
Võib muidugi leiutada targema algoritmi parooli keerukuse kontrollimiseks, kuid on olemas teine lahendus.
Selle lahenduse sisu on järgmine: paroole tuleb soolata. Sool on spetsiaalne juhuslik string, mis lisatakse paroolile registreerumisel ja räsi arvutatakse mitte lihtsalt paroolist, vaid stringist sool+parool, see tähendab soolatud paroolist.
See tähendab, et registreerumisel teete umbes midagi sellist:
<?php
$salt = '1sJg3hfdf'; // sool - keerukas juhuslik string
$password = md5($salt . $_POST['password']); // teisendame parooli soolatud räsiks
?>
Sel juhul on sool iga kasutaja jaoks erinev, see tuleb juhuslikult genereerida registreerumise momendil.
Siin on valmis funktsioon, mis teeb selle:
<?php
function generateSalt()
{
$salt = '';
$saltLength = 8; // soola pikkus
for($i = 0; $i < $saltLength; $i++) {
$salt .= chr(mt_rand(33, 126)); // sümbol ASCII-tabelist
}
return $salt;
}
?>
Selle funktsiooni abil saame meie koodi ümber kirjutada nii:
<?php
$salt = generateSalt(); // sool
$password = md5($salt . $_POST['password']); // soolatud parool
?>
Kordan veelkord, et need olid muutused registreerumisel - andmebaasi salvestame mitte lihtsalt parooli räsi, vaid soolatud parooli räsi.
See pole veel kõik: kasutajate tabelis peale
väljade login ja password on
vaja teha ka väli salt, kus me
hoiame iga kasutaja soola.
Realiseerige ülalkirjeldatud registreerimine soolatud parooliga.