Qeydiyyatda duz əlavə etmək
Beləliklə, artıq bilirsiniz ki,
md5 vasitəsilə heşləmə - geri dönməz
prosesdir və heşə əldə edən haker, bu heş
vasitəsilə parolu əldə edə bilməz.
Əslində bu ifadə tam doğru deyil - hazırda pis niyyətli hakerlər məşhur və daha az məşhur parolların heş kitabxanalarını yaratmışlar və hər hansı bir axmaq sadəcə onun heşini axtararaq parolu tapa bilər.
Bu, kifayət qədər sadə, məşhur parollar haqqındadır.
Məsələn, 827ccb0eea8a706c4c34a16891f84e7b
heşini axtarın və dərhal Google axtarışında
bunun '12345' parolu olduğunu görəcəksiniz.
Kifayət qədər mürəkkəb parolların heşlərini bu şəkildə tapmaq mümkün deyil (sınayın).
Sorşa bilərsiniz, problem onda nədir - gəlin hamımız mürəkkəb parollarla qeydiyyatdan keçək. Lakin bir problem var - istifadəçilərin əksəriyyəti öz məlumatlarının təhlükəsizliyi barədə düşünmür və kifayət qədər sadə parollar daxil edə bilər.
Qeydiyyat zamanı istifadəçiləri daha uzun parol
tapmağa məcbur edə bilərik, məsələn, minimum
simvol sayını 6 və ya 8 ilə
məhdudlaşdıraraq, lakin yenə də '123456'
ya da '12345678' tipli parollar meydana çıxacaq.
Əlbəttə, parolun mürəkkəbliyini yoxlamaq üçün daha ağıllı alqoritm tapmaq olar, amma başqa bir həll var.
Bu həllin mahiyyəti belədir: parolları duzlamaq lazımdır. Duz - bu, xüsusi təsadüfi sətirdir, hansı ki, qeydiyyat zamanı parola əlavə olunacaq və heş artıq sadə paroldan deyil, duz+parol sətirindən, yəni duzlanmış paroldan hesablanacaq.
Yəni qeydiyyat zamanı siz bu cür bir şey edəcəksiniz:
<?php
$salt = '1sJg3hfdf'; // duz - mürəkkəb təsadüfi sətir
$password = md5($salt . $_POST['password']); // parolu duzlanmış heşə çeviririk
?>
Bu zaman hər bir istifadəçi üçün duz fərqli olacaq, onun qeydiyyat anında təsadüfi şəkildə yaradılması lazımdır.
Budur, bunu edəcək hazır funksiya:
<?php
function generateSalt()
{
$salt = '';
$saltLength = 8; // duzun uzunluğu
for($i = 0; $i < $saltLength; $i++) {
$salt .= chr(mt_rand(33, 126)); // ASCII cədvəlindən simvol
}
return $salt;
}
?>
Bu funksiya vasitəsilə bizim kodumuzu belə yenidən yaza bilərik:
<?php
$salt = generateSalt(); // duz
$password = md5($salt . $_POST['password']); // duzlanmış parol
?>
Bir daha təkrar edirəm ki, bunlar qeydiyyat zamanı edilən dəyişikliklər idi - VT-də sadəcə parolun heşini deyil, duzlanmış parolun heşini saxlayırıq.
Bu, hələ hamısı deyil: istifadəçilər cədvəlində
login və password sahələrindən
əlavə, hər bir istifadəçinin duzunu saxlayacağımız
salt sahəsi də olmalıdır.
Yuxarıda təsvir olunan duzlanmış parolla qeydiyyatı həyata keçirin.