Задать вопрос
@Zhenya1243

Могу ли я прогнать через password_hash пароли в бд, которые md5, чтобы не сломалась авторизация?

У меня в таблице пароли пользователя хранятся в формате md5 (сохранял так: $user->password = md5($input_password)).

Поскольку md5 небезопасен, я решил перейти на password_hash. Необработанные пароли пользователей мне неизвестны.
Я решил сделать такой патч
foreach ($users as $user) {
$user->password = password_hash($user->password, PASSWORD_DEFAULT);
$user->save();
}.

При входе просто изменю проверку с
if (md5($input_password) == $db_row['password'])
на
if (password_verify(md5($input_password), $db_row['password']))

По правде говоря, я уже протестировал, и работает. Но нейросеть негодовала, писала, что в password_hash можно передать только чистые данные, а не готовые хэши. Но ведь md5 это ведь просто строка, причем постоянная
  • Вопрос задан
  • 107 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
@alexalexes
Смену способа хеширования пароля вы можете провернуть только при участии каждого пользователя, в два этапа.
1 этап.
Делаете патч в функцию авторизации.
Когда пользователь авторизуется, проверяете, что заполнено поле по хешу новой функции.
Если оно заполнено по новой функции, то все проверки верности пароля проводите с ней, поле старой функции игнорируете.

Если хеш по новой функции не заполнен, то проверяете, что пароль верен с точки зрения хеша старой функции. Если верен пароль, то записываете хеш по новой функции, так как у вас есть исходный пароль.
Так вы накапливаете базу пользователей, которые часто заходят. И для них вы бесшовно меняете хеши.

2 этап
Когда число поменянных хешей примерно будет равно числу активных пользователей за определенный период, то в патче запрещаете пользоваться старым хешем для проверки паролей, отправляете пользователя принудительно восстанавливать пароль по другим учетным данным, например, по эл. почте.
При восстановлении доступа пароль хешировать новой функцией.
Все, с этого момента можно избавиться от логики использования старого хеша.
Ответ написан
Комментировать
Да, можете. Дохеширование пароля это нормальная практика
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы