Шифрование паролей пользователей на сайте
Многие из Вас прекрасно понимают, что хранить пароли в открытом виде в базе данных - крайне глупо. Если злоумышленник каким-то образом получит доступ к таблице с пользователями, то у него будет полная база паролей. А учитывая, что большинство пользователей имеют 1 пароль для всех сайтов, последствия могут быть печальными, а всё по Вашей вине. Есть, конечно, MD5-хэширование, но оно не даёт 100% гарантии, что пароли не будут расшифрованы. Почему это так и как правильно шифровать пароли пользователей на сайте, Вы узнаете из этой статьи.
MD5 - это общедоступный алгоритм шифрования. И многие сайты хэшируют пароли только с помощью этого алгоритма. Безусловно, алгоритм MD5 необратим. Однако, далеко не все знают, что в Интернете существует масса баз, в которых уже посчитаны, порой, десятки миллионов паролей и их MD5-хэшей. Фактически, злоумышленник просто вставляет хэш в форму и почти мгновенно получает изначальный пароль.
Но Вы должны понимать, что десятки миллионов паролей - это капля в море, подобно размерам небольшого города и Вселенной. Но проблема в том, что в этом "городе" хранятся самые популярные пароли. Таким образом, несмотря на MD5-хэширование паролей у пользователей, всё-таки многие пароли всплывут. Однако, из этого есть выход.
Простеший способ, который защитит Вас от кражи паролей на 99.99% - это хэширование не просто пароля, но и некого секретного слова:
<?php
$secret = "Xdgd99DFd9Z"; // Секретное слово
$password = "123"; // Пароль
echo md5($password.$secret); // Результат хэширования
?>
Теперь, несмотря на тривиальность пароля, по хэшу его будет невозможно угадать. Ваша же задача, как Администратора, подобрать такое секретное слово, чтобы его гарантированно не было в этих базах. Для этого достаточно произвольным образом нажимать клавиши на клавиатуре. И данное слово надо сохранить в конфигурационном файле сайта, чтобы всегда к нему был доступ. Также можно не бояться, что злоумышленник узнает это слово, оно ему всё равно не поможет. Само слово запоминать Вам не нужно.
Вот таким нехитрым образом шифруется пароль пользователя на сайте. И теперь даже если кто-то и украдёт хэши пользователей, то они ему абсолютно ничем не помогут.
-
- Михаил Русаков
Комментарии (16):
Все гениальное просто.
Ответить
Почему в 3 видеоуроке Вашего бесплатного видеокурса по php перед концом все становиться красным цветом и все. Что мне делать?
Ответить
Попробуйте в другом браузере, и обновите Flash Player, если он уже у Вас старый.
Ответить
Я открываю его через Macromadia flash player. А приложенный Flash Player не устанавливается. Что делать?
Ответить
Попробуйте открыть в браузере, а приложенный для тех, у кого к Интернету нет нормального доступа. Для всех остальных: http://get.adobe.com/ru/flashplayer/
Ответить
Когда скачаю и установлю все должно быть хорошо?
Ответить
Всё будет хорошо, в том плане, что ничего не сломается. А вот исчезнут ли красные полосы, не знаю. У меня их нет, у других тоже крайне редко встречаются.
Ответить
У меня не получается установить этот плеер. Что делать? Попробовал много раз.
Ответить
Зайдите на этот сайт через Firefox, установите плеер. Потом смотрите уроки в Firefox.
Ответить
Как зайти через Firefox и куда?
Ответить
http://myrusakov.ru/minimum-knowledge.html
Ответить
Что-то я стал задумываться о покупке Вашего полного видеокурса. Я просто из Украины. Сколько он стоит в гривнах или долларах.
Ответить
Тут все курсы: http://srs.myrusakov.ru/list.php 1$ = 30 рублей 1 гривна = 4 рубля
Ответить
Здравствуйте, Михаил. А какие символы необходимо разрешить пользователям для ввода пароля, но при этом чтобы всё оставалось в безопасности, чтобы не пролез вредоносный код?
Ответить
Пусть вводят, что хотят, только вот это почитайте: http://myrusakov.ru/php-security.html
Ответить
Добрый день. В статье написано: "И теперь даже если кто-то и украдёт хэши пользователей, то они ему абсолютно ничем не помогут." Если я правильно понял, то после расшифровки хэшей злоумышленник получит следующие данные "парольсекретноеслово". Он не подойдет для ввода и один такой пароль не понять, но если он расшифрует несколько пользовательских паролей, то можно заметить, что у всех паролей есть одинаковый хвост и может просто убрать его. Или я чего то не понимаю? Добавлено: Попробовал немного модифицировать. Вот что получилось class password_hash { var $secret_word_begin = 'Секретное слово в начале'; var $secret_word_middle = 'Секретное слово в середине'; var $secret_word_end = 'Секретное слово в конце'; public function pass_crypt($pass) { return md5(md5($this->secret_word_begin.substr($pass, 0, strlen($pass) / 2).$this->secret_word_middle.substr($pass, strlen($pass) / 2).$this->secret_word_end)); } } То есть 3 секретных слова. Вначале, середине и в конце. Плюс двойное MD5. Думаю в таком случае взломать гораздо труднее будет =)
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.