Создание движка на MVC. Улучшаем шифровку пароля пользователей.
Всем привет! В этой статье мы рассмотрим, как сделать шифрование пароля пользователей более сильным для нашего движка на mvc.
Если вы сейчас зайдете в базу данных, скопируете хэш пароля и вставите его в любом расшифрователе MD5, то увидите свой пароль. Это не есть хорошо, давайте это исправим.
Создадим папку hash в папке libs, в этой папке создадим файл Hash.php
class Hash {
public static function create($algo, $data, $salt) {
$context = hash_init($algo, HASH_HMAC, $salt);
hash_update($context, $data);
return hash_final($context);
}
}
В файле index.php подключим библиотеку.
// ...
require 'libs/Session.php';
require 'libs/Hash.php'
// ...
Создадим файл constants.php в папке config.
define('HASH_KEY', '34398soghso43o4fjdk234l');
Также подключим его в index.php
// ...
require 'config/constants.php';
Теперь откроем файл login_model.php и изменим метод шифровки пароля там.
// ...
':password' =>Hash::create('md5', $_POST['password'], HASH_KEY)
// ...
И, также, немного подправим запрос
... password = :password");
Таким образом мы довольно сильно улучшили безопасность пользователей.
Если вы сейчас сформируете хэш, используя наш метод create(), а затем вставите его в базу данных для какого-нибудь пользователя вместо старого хэша и попробуете авторизоваться, то все должно пройти успешно.
На этом все, мы сделали новый алгоритм шифровки, а в следующих статьях будем внедрять его в наш движок, чтобы именно этот способ использовался при регистрации нового пользователя как обычным способом, так и при создании пользователя в базе данных.
Спасибо за внимание!
-
- Михаил Русаков
Комментарии (5):
Взял свой пароль зашифрованный в md5, ни один из 3-х сервисов не смог его расшифровать, то есть расшифровка идет уже по готовым базам расшифрованных паролей?
Ответить
Здравствуйте. Да, существуют огромные базы паролей, однако не все пароли там есть. Если вы, к примеру, попробуете там ввести хэш пароля 123, то увидите ваш пароль. Если, конечно, вы введете что-то очень длинное и сложное, то, скорее всего, его не будет в базе, но пользователи любят вводить простые пароли, следовательно, лучше себя и их обезопасить.
Ответить
Спасибо за ответ!
Ответить
Ну по сути это тоже самое, если писать линейно: $salt = random(...); $password = $_POST['password']; $hash = md5(md5($password) . $salt); Кстати, с 1 апреля :)
Ответить
Продолжение статей будет? Интересно как например получить логин пользователя из класса User в других классах?
Ответить
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.