Задать вопрос
@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 это ведь просто строка, причем постоянная
  • Вопрос задан
  • 236 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 3
@alexalexes
Смену способа хеширования пароля вы можете провернуть только при участии каждого пользователя, в два этапа.
1 этап.
Делаете патч в функцию авторизации.
Когда пользователь авторизуется, проверяете, что заполнено поле по хешу новой функции.
Если оно заполнено по новой функции, то все проверки верности пароля проводите с ней, поле старой функции игнорируете.

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

2 этап
Когда число поменянных хешей примерно будет равно числу активных пользователей за определенный период, то в патче запрещаете пользоваться старым хешем для проверки паролей, отправляете пользователя принудительно восстанавливать пароль по другим учетным данным, например, по эл. почте.
При восстановлении доступа пароль хешировать новой функцией.
Все, с этого момента можно избавиться от логики использования старого хеша.
Ответ написан
Комментировать
@artem-dainov
Php, java, js. Boot spring, jquery, git
Я делал так.
Просто уведомлял пользователей о том, что функционал улучшен и им нужно изменить пароль.
Отдельный костыль для этого писать смысла нет.
Всех отправить на восстановление пароля и всё.
Позже костыль придется убрать.
Ответ написан
Комментировать
Да, можете. Дохеширование пароля это нормальная практика
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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