Миграция пользователей на безопасный алгоритм хеширования в Symfony

Ваше приложение может использовать старый, небезопасный алгоритм хеширования для хранения пароля, такой как MD5 (без использования соли)

Эта статья объясняет как преобразовать уже имеющиеся пароли, зашифрованные уязвимым алгоритмом в пароли зашифрованные с использованием безопасного метода хеширования (например с использованием Bcrypt )

Что бы решить проблему, мы сделаем конвертацию на лету, когда пользователь успешно входит в систему. Будем использовать интерфейс  EncoderAwareInterface

login listener и использовать не очень хорошо известные параметры в  security.yml.

 

Аутентификация до миграции

Если ваше приложение использует зашифрованные при помощи MD5 пароли, файл security.yml будет выглядеть примерно так что бы аутентификация Symfony работала

В этой статье, мы предполагаем что сущность User выглядит следующим образом:

Добавляем «слушатель», который будет выполнять миграцию

Мы присоединим слушатель на событие Symfony security.interactive_login это событие срабатывает, когда пользователь выполнил успешный вход.

Для начала определим этот слушатель в файле  services.yml file:

Declare first the listener in the services.yml file:

Создадим слушатель

Этот слушатель обновляет пароль пользователь только в случае если пользователь все еще использует устаревшую систему паролей.

Что бы перекодировать пароль, нам нужен незахешированный пароль, введенный пользователем, который по-умолчанию недоступен в   authentication token предоставленный объектом  InteractiveLoginEvent. Что бы сделать его доступным, сделайте следующие изменения в файле  security.yml:

Как только ваши пользователи будут входить, данные о них будут обновлены в базе данных, делая их более безопасными со временем. Однажды, основная часть пользователей хотя бы раз выполнит вход и вы сможете удалить колонку old_password и реализовать фичу «Забыли пароль?» для тех, кто не был мигирован.

Автор: Michaël Perrin, ссылка на оригинальный пост

Добавить комментарий