Kuongeza Chumvi katika Uthibitishaji
Sasa tunahitaji kubadilisha mfumo wa uthibitishaji. Hapa mabadiliko yatakuwa makubwa zaidi.
Haitakuwa tena rahisi kuangalia usahihi wa jina la mtumiaji na nenosiri mara moja, kwa ombi moja tu. Kwa nini: kwa sababu, ili kuangalia nenosiri, ni muhimu kupata hash yake iliyo na chumvi, na chumvi hiyo inahifadhiwa katika hifadhidata na ni ya kipekee kwa kila jina la mtumiaji.
Itabidi kwanza kupata rekodi tu kwa kutumia jina la mtumiaji, kusoma chumvi, kuongeza chumvi kwenye nenosiri lililoingizwa na kulinganisha na nenosiri lililo na chumvi kutoka kwa hifadhidata na tu, ikiwa vinafanana, - kumthibitisha mtumiaji.
Zingatia, inawezekana jina la mtumiaji limeandikwa vyema, katika kesi hii uchunguzi wa nenosiri hauna haja kufanyika, bali mara moja tuonyeshe kwamba uthibitishaji hauwezekani - data sio sahihi:
<?php
$login = $_POST['login'];
$query = "SELECT * FROM users WHERE login='$login'";
$res = mysqli_query($link, $query);
$user = mysqli_fetch_assoc($res);
if (!empty($user)) {
// kuna mtumiaji na jina hili, sasa inabidi kuangalia nenosiri...
} else {
// hakuna mtumiaji na jina hili, onyesha ujumbe
}
?>
Wacha tuongeze ukaguzi wa nenosiri:
<?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']; // chumvi kutoka Hifadhidata
$hash = $user['password']; // nenosiri lililo na chumvi kutoka Hifadhidata
$password = md5($salt . $_POST['password']); // nenosiri lililo na chumvi kutoka kwa mtumiaji
// Linganisha hash zilizo na chumvi
if ($password == $hash) {
// yote sawa, thibitisha...
} else {
// nenosiri halikubalika, onyesha ujumbe
}
} else {
// hakuna mtumiaji na jina hili, onyesha ujumbe
}
?>
Kwa sababu za usalama, mtumiaji kawaida hatajulishwi nini hasa kilikosekana - jina la mtumiaji au nenosiri, ili kuwezesha kubagua jozi za jina la mtumiaji-nenosiri na wakora. Tuonyeshe ujumbe kwamba jozi ya jina la mtumiaji na nenosiri sio sahihi au kitu kama hicho.
Tekeleza uthibitishaji ulioelezewa hapo juu ukitumia nenosiri lenye chumvi. Jaribu kujiandikisha, kujithibitisha, uhakikishe kuwa yote yanafanya kazi.