Рўйҳатдан ўтишда туз қўшиш
Шу сари, сиз md5 орқали хешлаш - бу
қайтариб бўлмайдиган жараён ва хешга кириш
ҳозир қилган ҳакер, ушбу хеш орқали паролни
ола олмаслигини биласиз.
Аслида бу такдир ўзида тўғри эмас - ҳозирги вақтда ёмон ниятли ҳакерлар оммабоп ва бошқа паролларнинг хешлар кутубхонасини туздилар ва ҳар қандай ахмоқ унинг хешини фақат Google орқали излаб топиш билан паролни аниқлай олади.
Бу жуда содда, оммабоп пароллар ҳақида.
Масалан, 827ccb0eea8a706c4c34a16891f84e7b
хешини Google да изланг ва сиз дарҳол Google
излашда бу '12345' пароли эканлигини
кўрасиз.
Жуда қийин паролларнинг хешларини шу тарзда аниқлаб бўлмайди (синаб кўринг).
Сиз щундай савол беришингиз мумкин, у ҳолда муаммо нимада - келинг ҳаммимиз қийин пароллар билан рўйҳатдан ўтамиз. Аммо, бир муаммо бор - фойдаланувчиларнинг кўпи ўзларининг маълумотлари xавфсизлиги ҳақида ўйламайдилар ва жуда содда паролларни киритишлари мумкин.
Биз рўйҳатдан ўтганда уларни яна узунроқ
паролларни тўпиришга мажбурлашимиз мумкин,
масалан, минимал белгилар сонини 6
ёки 8 билан чеклаб, бирок, шунга
қарамай '123456' ёки '12345678'
коринишидаги пароллар пайдо бўлади.
Албатта, паролнинг мураккаблигини текшириш учун яна ақллироқ алгоритмни тўпириш мумкин, лекин бошқа ечим бор.
Бу ечимнинг моҳияти шундай: пароллар тузланған бўлиши керак. Туз - бу махсус тасодифий сатр, у рўйҳатдан ўтишда паролга қўшилади ва хеш энди содда паролдан эмас, балки туз+парол сатридан, яъни тузланған паролдан ҳисобланади.
Яъни рўйҳатдан ўтишда сиз щундай нарса қиласиз:
<?php
$salt = '1sJg3hfdf'; // туз - мураккаб тасодифий сатр
$password = md5($salt . $_POST['password']); // паролни тузланған хешга айлантирамиз
?>
Бу ҳолда туз ҳар бир фойдаланувчи учун ҳар хил бўлади, уни рўйҳатдан ўтиш пайтида тасодифий равишда яратиш керак.
Мана буни қиладиган тайёр функция:
<?php
function generateSalt()
{
$salt = '';
$saltLength = 8; // туз узунлиги
for($i = 0; $i < $saltLength; $i++) {
$salt .= chr(mt_rand(33, 126)); // ASCII-жадвалдан белги
}
return $salt;
}
?>
Ушбу функция ёрдамида бизнинг кодимизни щундай қайта ёзиш мумкин:
<?php
$salt = generateSalt(); // туз
$password = md5($salt . $_POST['password']); // тузланған парол
?>
Яна бир бор такрорлайман, бу рўйҳатдан ўтишдаги ўзгаришлар эди - МБ да биз жуда парол хешини эмас, балки тузланған парол хешини сақлаймиз.
Бу ҳали ҳаммаси эмас: фойдаланувчилар jадвалида
login ва password майдонидан
ташқари яна salt майдонини ҳам қилиш
керак, унда биз ҳар бир фойдаланувчининг тузини
сақлаймиз.
Юқорида тавсифланган тузланған парол билан рўйҳатдан ўтишни амалга оширинг.