Миграция пароля — Drupal SHA2 в версию PHP MD5

Как всем известно, Drupal хранит пароль, используя метод SHA2, который включает в себя шифрование + хеширование + соль.

У меня есть список паролей, которые в настоящее время используются некоторыми из моих клиентов в Drupal. Поскольку мы перевели всю систему на пользовательский PHP, мы не можем использовать одни и те же пароли. И мы действительно не хотим просить всех в базе данных генерировать новые пароли.

Если есть какой-либо способ, где мы могли бы изменить все пароли, которые находятся в SHA2 (Drupal - шифрование 512), чтобы поддержать нашу новую систему, которая в настоящее время имеет MD5/SHA1 (база данных PHP Mysql).

Любая помощь будет оценена по достоинству.


person Chintan Jain    schedule 16.07.2016    source источник
comment
Нет, нет никакого способа преобразовать их без взаимодействия с пользователем. Неужели новая система настолько заблокирована, что вы не можете просто использовать то же хеширование, что и старая? MD5 небезопасен, а SHA1 уже вызывает сомнения.   -  person Sami Kuhmonen    schedule 16.07.2016
comment
Мы не хотим просить кого-либо из наших пользователей сбросить свои пароли. Поскольку новая система разработана нами, у нас есть полный контроль над выбором алгоритма для наших паролей. Весь смысл в том, чтобы сделать это, потому что наши пароли, которые были в Drupal, не работают в версии на основе mysql.   -  person Chintan Jain    schedule 16.07.2016
comment
Я не понимаю совместимость на основе MySQL. База данных просто хранит значения, как это влияет на аутентификацию? Разве в вашем коде не происходит аутентификация?   -  person Sami Kuhmonen    schedule 16.07.2016
comment
Допустим, у одного из наших пользователей есть пароль testmylogin, поэтому drupal выдаст нам хешированный пароль на основе алгоритма SHA2. Однако мы хотим, чтобы наши пользователи по-прежнему использовали свои старые пароли. Все хешированные пароли в настоящее время доступны в нашей базе данных (как вы сказали ранее), но в любом случае мы не можем провести аутентификацию на основе этого.   -  person Chintan Jain    schedule 16.07.2016
comment
Почему нет? Вы берете точный алгоритм из Drupal и используете его на своем новом сайте. Проблема решена, все пароли работают как и раньше и нет необходимости в более слабых хэшах   -  person Sami Kuhmonen    schedule 16.07.2016
comment
В наши дни хеширование паролей становится все более стандартизированным. Существуют согласованные идентификаторы, такие как $2y$10$...., которые кодируют используемый алгоритм, а также любую соответствующую настройку сложности.   -  person tadman    schedule 16.07.2016
comment
stackoverflow.com/questions/5031662 /   -  person Sami Kuhmonen    schedule 16.07.2016
comment
Добро пожаловать в Stack Overflow! Вы никогда не должны использовать простую хеш-функцию для защиты паролей ваших пользователей. Вам нужно использовать надежную схему хеширования, такую ​​как PBKDF2, bcrypt, scrypt и Argon2. Обязательно используйте высокий коэффициент стоимости/количество итераций. Обычно стоимость выбирают так, чтобы одна итерация занимала не менее 100 мс. Подробнее: Как безопасно хешировать пароли?   -  person Artjom B.    schedule 16.07.2016
comment
Вы были бы дураком, если бы перешли с SHA2 на MD5. Не делайте этого. Вы не эксперт по безопасности. Не делай этого. Во имя любви Господа.   -  person Luke Joshua Park    schedule 17.07.2016
comment
@LukePark это новый пользователь с одной стороны. Возможно, вы сможете перефразировать вещи в будущем.   -  person Drew    schedule 17.07.2016
comment
@Drew Обычно я бы так и сделал, но когда дело доходит до безопасности, слишком много людей делают это неправильно, и тогда я страдаю из-за этого. Немного больше веса за моими словами может заставить их действительно слушать. Однако я ценю вашу точку зрения.   -  person Luke Joshua Park    schedule 17.07.2016
comment
@LukePark и нежелательные ответы тоже надоедливы, что приводит к real-escap?noredirect=1#comment64014116_38297105">это   -  person Drew    schedule 17.07.2016
comment
Вам действительно не следует использовать хэши паролей MD5, и вам действительно следует использовать PHP встроенные функции для защиты паролей. Перед хешированием убедитесь, что вы не экранируете пароли и не используете какой-либо другой механизм очистки. При этом изменяется пароль и возникает ненужное дополнительное кодирование.   -  person Jay Blanchard    schedule 19.07.2016


Ответы (4)


Вы действительно не хотите переходить на MD5. Что касается метода хеширования паролей, он мертв. Вы должны перейти к password_hash и что-то как Bcrypt на абсолютном минимуме.

Помните, когда кто-то входит в систему, и вы проверяете правильность его пароля, это ваш шанс обновить способ хеширования пароля в базе данных. Если они используют слабый метод, переключитесь на надежный и сохраните свою запись пользователя. Никто не узнает, что ты сделал.

Через год или около того вы всегда можете принудительно истечь срок действия всех паролей старого формата, если вас беспокоит эта затянувшаяся ответственность. Все ваши активные пользователи не будут затронуты.

person tadman    schedule 16.07.2016

Я бы не советовал переходить на другой формат пароля и особенно на MD5. Поскольку у вас уже есть пароли, вы можете реализовать хеширование паролей Drupal в своем собственном приложении и просто продолжать использовать существующие пароли.

Дополнительную информацию о форматах паролей можно найти, например, в этом вопросе .

person Sami Kuhmonen    schedule 16.07.2016

Я думаю, вы должны использовать «переход». Например, используйте новую систему, но оставьте старый пароль в базе данных.

В вашем коде при входе пользователя вы получаете пароль (например: $_POST['pwd']) и шифруете его с помощью алгоритма strong (не MD5). Затем вы можете вставить его в новое поле вашей базы данных.

Таким образом, ваша новая база данных может иметь поле «old_pwd», содержащее старый пароль, и поле «pwd», содержащее новый пароль с использованием вашего нового алгоритма. По моему мнению, это самый простой способ миграции.

person AnthonyB    schedule 16.07.2016

Код проверки пароля очень похож на Drupal 7 и 8 и его легко заимствовать, он не имеет сильной зависимости от компонента Drupal. Должно быть довольно легко добавить поддержку хэшей Drupal в ваш код проверки пароля. Разрешить пользователям проходить аутентификацию с использованием своего пароля, сохраняя хэши Drupal в вашей базе данных.

Чтобы перейти на новый алгоритм хеширования, просто повторно хешируйте пароли при успешной аутентификации. Таким образом, старые хэши со временем будут заменены.

Drupal имеет аналогичный механизм для обеспечения прозрачных обновлений или старых хэшей MD5. Посмотрите на user_check_password() и user_needs_new_hash(), чтобы увидеть, как это может быть сделано.

person Pierre Buyle    schedule 16.07.2016