Добавление пользовательской соли в пароли пользователей в drupal - PullRequest
0 голосов
/ 19 августа 2011

Я переезжаю через довольно большой сайт на Аспу в друпал. Мне удалось перенести большую часть контента, и теперь у меня возникли небольшие проблемы с переносом пользователей.

На сайте ASP у каждого участника есть пароль и столбец соли, при входе в систему к их предоставленному паролю добавляется зашифрованная соль и sha1, а затем сравнивается с паролем БД.

Как мне реализовать это в drupal 6? В Drupal 6 по умолчанию нет соли. Я нашел модуль соли друпала, но он невероятно упрощен и хранит только количество соли по всему миру.

Нужно ли добавлять столбец соли в пользовательскую таблицу и добавлять некоторую пользовательскую логику в функцию входа в систему drupal6? Я понимаю, что это несколько плохая практика, поскольку обновление приложения до более поздней версии drupal может быть проблематичным. Но мы в любом случае используем несколько модулей для drupal 6, поэтому я чувствую, что обновление до drupal 7 будет кошмаром, независимо от того. У кого-нибудь была эта проблема раньше? Что является самым простым (чертовски постоянным веб-заданием :) хорошим способом обойти это?

В основном у меня есть таблица пользователей в приложении ASP, которая включает следующие столбцы:

Имя | Password_hash | Соль | и т.д.

Мне нужен какой-то способ перенести это в Drupal.

Ответы [ 2 ]

2 голосов
/ 20 февраля 2013

Я не уверен, как это работало в Drupal 6, но Drupal 7 реализует соль, используемую при сравнении с паролем db, в сравниваемой строке. При просмотре _password_crypt () в password.inc, $ salt определяется как

$salt = substr($setting,4,8);

Где переменная $ setting - это первые 12 символов пароля базы данных. Соль, если затем добавляется к паролю $.

$hash = hash($algo, $salt . $password);

Важно принять во внимание, что это хеширование выполняется многократно, в частности, для повышения безопасности. Чтобы узнать, сколько раз он хэшируется, используется второй символ пароля базы данных (на самом деле он находится между знаками $), чтобы узнать количество выполненных повторений. Этот символ сравнивается со строкой с именем itoa64 , поэтому позиция этого символа равна числу повторений в log2.

$itoa64 = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';

То, что я подразумеваю под log2 количество повторений , состоит в том, что фактическое число будет равно 2 степени этого числа. Таким образом, учитывая, что первое число находится в диапазоне от 7 до 30, количество повторений составляет от 128 до 1 073 741 824.

Наконец, зашифрованный пароль кодируется в base64, проверяется (сравнивается его длина до и после кодирования) и возвращается для сравнения с помощью user_check_password или используется user_hash_password для хранения со случайным хешем, сгенерированным с _password_generate_salt().

1 голос
/ 19 августа 2011

Я бы настоятельно рекомендовал для этой цели ветку Password module 1.0. Он дает вам возможность предоставить свой собственный файл password.inc, чтобы определить, как пароли должны хэшироваться и проверяться.

...