Запіс на курсы па HTML, CSS, JavaScript, PHP, Python, фрэймворкам і CMS,
а таксама: дапамога ў пошуку працы і заказаў, стажыроўка на рэальных праектах→
⊗ppPmAuRHS 424 of 447 menu

Дадаванне солі ў рэгістрацыю

Такім чынам, вы ўжо ведаеце, што хешаванне праз md5 - незваротны працэс і хакер, які атрымаў доступ да хешу, не зможа атрымаць па гэтым хешу пароль.

На самой справе гэта сцверджанне не зусім вернае - у цяперашні час злыя хакеры склалі бібліятэкі хешаў папулярных і не вельмі пароляў і любы дурэн можа разгадаць пароль, проста загугліўшы яго хеш.

Гаворка ідзе пра дастаткова простыя, папулярныя паролі.

Загугліце, напрыклад, хеш 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, у якім мы будзем захоўваць соль кожнага карыстальніка.

Рэалізуйце апісаную вышэй рэгістрацыю з салёным паролем.

byenru