Kuongeza Chumvi kwenye Usajili
Kwa hivyo, tayari unajua kuwa kutenganisha kupitia
md5 ni mchumo usio wa kubadilishwa na hacker,
aliyepata uhakika wa mchumo, hataweza kupata
kupitia mchumo huu nywila.
Kweli kauli hii si sahihi kabisa - kwa sasa wahalifu wameandika maktaba ya michumo ya nywila maarufu na visivyo vya kawaida na mtu yeyote mpuuzi anaweza kufumbua nywila, tu kwa kutafuta mchumo wake kwenye wavuti.
Inahusu nywila rahisi, za kawaida.
Tafuta kwenye wavuti, kwa mfano, mchumo 827ccb0eea8a706c4c34a16891f84e7b
na mara moja kwenye utafutaji utaona, kwamba hii ni
nywila '12345'.
Michumo ya nywila ngumu kwa kiasi kikubwa kwa njia hii hawezi kufumbuliwa (jaribu).
Unaweza kuuliza, basi shida iko wapi - wacha sisi sote tujisajili kwa nywila ngumu. Hata hivyo, kuna shida - wengi wa watumiaji hawazami kuhusu usalama wa data zao na wanaweza kuingiza nywila rahisi kwa kiasi kikubwa.
Tunaweza wakati wa usajili kulazimu watumiaji kubuni
nywila refu zaidi, kwa kuzuia, kwa mfano,
kiwango cha chini cha herufi 6
au 8, hata hivyo, bado zitakuwapo
nywila za aina '123456' au '12345678'.
Bila shaka, unaweza kubuni algoriti za busara zaidi za kuangalia ugumu wa nywila, lakini kuna suluhisho lingine.
Kiini cha suluhisho hili ni hili: nywila zinahitaji kuongezewa chumvi. Chumvi - hii ni mfuatano maalum wa nasibu, ambao utaongezwa kwenye nywila wakati wa usajili na mchumo tayari utahesabiwa sio kutoka kwa nywila rahisi za aina, bali kutoka kwa mfuatano chumvi+nywila, ya maana kutoka kwa nywila zilizo na chumvi.
Yaani wakati wa usajili utafanya kitu kama hiki:
<?php
$salt = '1sJg3hfdf'; // chumvi - mfuatano mgumu wa nasibu
$password = md5($salt . $_POST['password']); // badilisha nywila kuwa mchumo wenye chumvi
?>
Wakati huo chumvi itakuwa tofauti kwa kila mtumiaji, inahitajika kutengenezwa kwa nasibu wakati wa usajili.
Hapa kuna utendaji tayari, ambayo utafanya hivi:
<?php
function generateSalt()
{
$salt = '';
$saltLength = 8; // urefu wa chumvi
for($i = 0; $i < $saltLength; $i++) {
$salt .= chr(mt_rand(33, 126)); // herufi kutoka kwenye jedwali la ASCII
}
return $salt;
}
?>
Kwa kutumia utendaji huu unaweza kuandika tena msimbo wetu hivi:
<?php
$salt = generateSalt(); // chumvi
$password = md5($salt . $_POST['password']); // nywila zilizo na chumvi
?>
Nairudie tena, kwamba hii ilikuwa ni mabadiliko wakati wa usajili - kwenye Hifadhidata tunaweka sio tu mchumo wa nywila, bali mchumo wa nywila zilizo na chumvi.
Hii haitoshi: kwenye jedwali la watumiaji badala ya
sehemu login na password inahitajika
kutengenezwa na sehemu salt, ambayo
tutaweka kuhifadhi chumvi ya kila mtumiaji.
Tekeleza usajili ulioelezewa hapo juu ukiwa na nywila zilizo na chumvi.