⊗ppPmAuRHS 424 of 447 menu

Добавяне на сол при регистрация

И така, вече знаете, че хеширането чрез md5 е необратим процес и хакер, получил достъп до хеша, няма да може да получи парола от този хеш.

Всъщност това твърдение не е напълно вярно - в настояще време зли хакери са съставили библиотеки с хешове на популярни и не много пароли и всеки глупак може да разгадае парола, просто като потърси хеша в Google.

Става дума за достатъчно прости, популярни пароли.

Потърсете в Google, например, хеша 827ccb0eea8a706c4c34a16891f84e7b и веднага в резултатите от търсенето ще видите, че това е парола '12345'.

Хешовете на достатъчно сложни пароли по този начин не могат да бъдат разгадани (опитайте).

Може да попитате, какъв е проблемът тогава - нека всички ние да се регистрираме със сложни пароли. Има обаче проблем - повечето потребители не мислят за сигурността на своите данни и може да въвеждат достатъчно прости пароли.

Можем при регистрация да задължаваме да се измислят по-дълги пароли, като ограничаваме, например, минималния брой символи на 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-table } return $salt; } ?>

С помощта на тази функция може да пренапишем нашия код ето така:

<?php $salt = generateSalt(); // сол $password = md5($salt . $_POST['password']); // осолена парола ?>

Още веднъж повторявам, че това бяха промени при регистрация - в базата данни запазваме не просто хеш на паролата, а хеш на осолената парола.

Това още не е всичко: в таблицата с потребители освен полетата login и password трябва да се направи и поле salt, в което ще съхраняваме солта на всеки потребител.

Реализирайте описаната по-горе регистрация с осолена парола.

Български
AfrikaansAzərbaycanবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне