Восстановление пароля Drupal 7

Главные вкладки

Аватар пользователя Mirocow Mirocow 6 сентября 2011 в 0:49
define('DRUPAL_ROOT', getcwd());

require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');
$admin = user_load(1);
$pass = isset($_GET['pass'])? trim($_GET['pass']): 'pass';
$uid = isset($_GET['uid'])? trim($_GET['uid']): 1;
$name = isset($_GET['name'])? trim($_GET['name']): 'admin';
user_save($admin, array('pass' => $pass, 'name' => $name));
$account = user_load($uid);
if(user_check_password($pass, $account)){
                echo "<pre>";
                echo "Login: {$account->name}\n";
                echo "Password: $pass\n";
                echo "</pre>";
}

Кладем данный скрипт например в pass.php в корень сайта и вызываем его так http://имя сайта/pass.php?pass=new_password

Этим простым запросом мы заменим пароль у юзера с uid 1.
все Wink

Комментарии

Аватар пользователя annya annya 6 сентября 2011 в 1:55

Он, хочет сказать, что функция user_hash_password, сама криптует пароль и в Drupal 7 пароли хранятся не в md5, а в SHA512+соль

Аватар пользователя Master of Tragedy Master of Tragedy 6 сентября 2011 в 12:31

"annya" wrote:
Он, хочет сказать, что функция user_hash_password, сама криптует пароль и в Drupal 7 пароли хранятся не в md5, а в SHA512+соль

Не, ну в скрипте то все понятно, а вот с SQL запросом не очень. Там то кто пароль криптовать будет?

Аватар пользователя Alex Bacart Alex Bacart 6 сентября 2011 в 12:34

"Master of Tragedy" wrote:
Там то кто пароль криптовать будет?

"Mirocow" wrote:
А выданный код необходимо вставить в таблицу users в колонку pass;

или выполнить простой SQL запрос.

Аватар пользователя Master of Tragedy Master of Tragedy 6 сентября 2011 в 12:39

А нафига велосипед изобретать?

Execute the following commands from the commandline, in the Drupal root directory:

./scripts/password-hash.sh newpwd

or for Windows:

php .\scripts\password-hash.sh newpwd

Аватар пользователя Alex Bacart Alex Bacart 6 сентября 2011 в 13:29

Когда у меня нет консоли, но есть доступ к БД, просто захожу и меняю пароль админа на $S$D3XU.7jOYRZ9KKfPZRLA/TKfgj2We51J61WQZHzzPb83Gt1upb2P - эквивалент 1234. Потом в админке меняю на то, что надо.

Аватар пользователя Mirocow Mirocow 6 сентября 2011 в 13:44

"Vydrin_AP" wrote:

ну а я просто запускаю скрипт и генерю что надо. Да и клиенту проще отдать файлик или самому залить по фтп. Просто мой скрипт еще и сам заменяет пароль, но в целях безопаснсти не стал приводить пример этого кода.

Те я просто отдаю файл, клиент его запускает, указывает пароль что ему нужен и стирает файл. И на этом все

Аватар пользователя Виктор Степаньков ака RxB Виктор Степаньк... 6 сентября 2011 в 13:52

"Vydrin_AP" wrote:
Когда у меня нет консоли, но есть доступ к БД, просто захожу и меняю пароль админа на $S$D3XU.7jOYRZ9KKfPZRLA/TKfgj2We51J61WQZHzzPb83Gt1upb2P - эквивалент 1234. Потом в админке меняю на то, что надо.

щаааааааааааааааааз. Соль-то

Аватар пользователя Alex Bacart Alex Bacart 6 сентября 2011 в 14:37

А вы пробовали это проделать? У меня срабатывает этот способ и на 6-ке (там вроде подсаливания еще не было) и на 7-ке (что удивительно).

Аватар пользователя Ch Ch 6 сентября 2011 в 14:40

Наверно, 7-ку ставили не с нуля а из какого нибудь дампа, поэтому и получилось, что соль везде одинаковая.

Аватар пользователя Mirocow Mirocow 30 сентября 2013 в 6:44
define('DRUPAL_ROOT', getcwd());

require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');
$admin = user_load(1);
$pass = isset($_GET['pass'])? trim($_GET['pass']): 'pass';
$uid = isset($_GET['uid'])? trim($_GET['uid']): 1;
user_save($admin, array('pass' => $pass));
$account = user_load($uid);
if(user_check_password($pass, $account)){
    echo "[OK]";
}