[Решено] Миграция пользователей и хеширование паролей

0 Пользователей и 1 Гость просматривают эту тему.
  • 8 Ответов
  • 283 Просмотров
*

RYUMASHKIN

  • Захожу иногда
  • **
  • 10
  • 0
Доброго времени суток достопочтенные форумчане.
Возник вопрос следующего толка.
Необходимо состыковать БД стороннего скрипта и Joomla соответсвенно, и соответственно перенести пользователей в Joomla чтобы олни могли авторизоваться со своими паролями.

Не подскажите как правильно завернуть пароль ?? Если не сложно то на простом примере.
« Последнее редактирование: 04.10.2016, 07:07:55 от RYUMASHKIN »

*

Arkadiy

  • Группа развития
  • *****
  • 5342
  • 440
  • Крепитесь, други.
md5 поможет, если у вас в стороннем скрипте пароль хранится в открытом виде, если нет, то никак.

*

RYUMASHKIN

  • Захожу иногда
  • **
  • 10
  • 0
md5 поможет, если у вас в стороннем скрипте пароль хранится в открытом виде, если нет, то никак.
То есть, вы хотите сказать что пароль в Joomla хранится просто в MD5?? Без солей и свистоплясок?  Да быть такого не может.

*

RYUMASHKIN

  • Захожу иногда
  • **
  • 10
  • 0
Ладно, зайдем с другой стороны.
Со стороннего скрипта я перенесу пользователей с принудительной сменой пароля к примеру.
Отправлю ему письмо со ссылкой на активацию нового пароля.
И теперь вопрос каким образом мне захешировать этот новый пароль для записи в БД??
К примеру у меня это работает образно говоря так

Код
$passwd = sha1($pkey . $password);
//где $pkey - это персональный уникальный ключ генерируемый для пользователя

*

SeBun

  • Практически профи
  • *******
  • 3081
  • 187
  • @SeBun48
Arkadiy немного о другом говорил. Пароли в Joomla хранятся не просто в виде хеша с солью, там другой алгоритм. В Joomla 3 паролями занимается класс JCrypt. Проверить свой пароль можно так:
   
Код: php
<?php
//проверка пароля в Joomla 3.х из стороннего скрипта. Этот скрипт лежит в корне сайта.
    if (!defined('_JEXEC')) {//подключение к Joomla
        define('_JEXEC', 1);
        define('JPATH_BASE', dirname(__FILE__));
        define('DS', DIRECTORY_SEPARATOR);
        require_once JPATH_BASE . DS . 'includes' . DS . 'defines.php';
        require_once JPATH_BASE . DS . 'includes' . DS . 'framework.php';
    }

//проверка пароля  
    $user = JFactory:: getUser('admin');//проверяем пользователя с логином admin
    $Password = "test";// пароль
 
    $verifyPass = JUserHelper::verifyPassword($Password, $user->password, $user->id);
    if($verifyPass) {echo 'Верный пароль!';}else{echo 'Неверный пароль!';}
?>

Так же можете в файле libraries\joomla\crypt\password\simple.php посмотреть, как Joomla обрабатывает разные типы паролей.

Вторую часть вопроса не понял. Если вы переносите своих пользователей в Joomla, то естественно ваш алгоритм создания хеша отличается от алгоритма этой CMS и пароль она дешифровать не сможет. Но вы можете пойти другим путем - сгенерировать всем новые пароли и сохранить их в MD5. В админке (или в БД) можете всех новых пользователейй деактивировать и уведомить о том, что нужно срочно сменить пароль. При этом пароль для каждого пользователя вместе с уведомлением выслать на e-mail. Пользователь зайдет уже в Joomla и создаст в ней свой пароль.

Конечно, можно поизвращаться, например, сбрутить все ваши sha1-пароли, но это вряд ли целесобразно. Как я понял из беглого просмотра исходников, Joomla 3 использует шифрование Blowfish, но поддерживает и md5. Поэтому вам проще сгенерировать пароли именно в MD5 и выслать их юзерам, чем заниматься какими то дополнительными обработками.

То есть, вы хотите сказать что пароль в Joomla хранится просто в MD5?? Без солей и свистоплясок?  Да быть такого не может.
По умолчанию - нет. Но такая возможность поддерживается.
« Последнее редактирование: 02.10.2016, 14:04:38 от SeBun »
Оказываю услуги по Joomla | Миграция на Joomla 3.x | Администрирование | Разработка
Ник занят

*

RYUMASHKIN

  • Захожу иногда
  • **
  • 10
  • 0
Arkadiy немного о другом говорил. Пароли в Joomla хранятся не просто в виде хеша с солью, там другой алгоритм. В Joomla 3 паролями занимается класс JCrypt. Проверить свой пароль можно так:
   
Код: php
<?php
//проверка пароля в Joomla 3.х из стороннего скрипта. Этот скрипт лежит в корне сайта.
    if (!defined('_JEXEC')) {//подключение к Joomla
        define('_JEXEC', 1);
        define('JPATH_BASE', dirname(__FILE__));
        define('DS', DIRECTORY_SEPARATOR);
        require_once JPATH_BASE . DS . 'includes' . DS . 'defines.php';
        require_once JPATH_BASE . DS . 'includes' . DS . 'framework.php';
    }

//проверка пароля   
    $user = JFactory:: getUser('admin');//проверяем пользователя с логином admin
    $Password = "test";// пароль
 
    $verifyPass = JUserHelper::verifyPassword($Password, $user->password, $user->id);
    if($verifyPass) {echo 'Верный пароль!';}else{echo 'Неверный пароль!';}
?>

Так же можете в файле libraries\joomla\crypt\password\simple.php посмотреть, как Joomla обрабатывает разные типы паролей.

Вторую часть вопроса не понял. Если вы переносите своих пользователей в Joomla, то естественно ваш алгоритм создания хеша отличается от алгоритма этой CMS и пароль она дешифровать не сможет. Но вы можете пойти другим путем - сгенерировать всем новые пароли и сохранить их в MD5. В админке (или в БД) можете всех новых пользователейй деактивировать и уведомить о том, что нужно срочно сменить пароль. При этом пароль для каждого пользователя вместе с уведомлением выслать на e-mail. Пользователь зайдет уже в Joomla и создаст в ней свой пароль.

Конечно, можно поизвращаться, например, сбрутить все ваши sha1-пароли, но это вряд ли целесобразно. Как я понял из беглого просмотра исходников, Joomla 3 использует шифрование Blowfish, но поддерживает и md5. Поэтому вам проще сгенерировать пароли именно в MD5 и выслать их юзерам, чем заниматься какими то дополнительными обработками.
По умолчанию - нет. Но такая возможность поддерживается.


Я планировал сделать просто.
В цикле я делаю выборку из БД
имя пользователя, email и инициирую для всех пользователей автоматически процедуру смены пароля. Тут я в принципе могу не мучиться и создать пользователя в таблице с любым значением хеша в поле пароля.
Отправляю пользователю письмо со ссылкой на смену пароля.
И вот этот введенный новый пароль мне нужно будет захешировать в 2 базы.
Как в мою базу происходит процесс я понимаю, потому и интересуюсь как хешировать пароль для Joomla. Хотелось бы просто оставить процесс регистрации, активации, смены пароля на моем скрипте.

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


*

dmitry_stas

  • Профи
  • ********
  • 9666
  • 931
ну вам же дали метод JUserHelper::verifyPassword($Password, $user->password, $user->id), ну посмотрите же его :) ну не копировать же простыни кода, если файлы доступны всем. вам нужна часть, в которой участвует третий переданный параметр $user->id (запускается механизм перехеширования, если используемый алгоритм старый, например md5)
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций

*

Arkadiy

  • Группа развития
  • *****
  • 5342
  • 440
  • Крепитесь, други.
То есть, вы хотите сказать что пароль в Joomla хранится просто в MD5?? Без солей и свистоплясок?  Да быть такого не может.
соль есть, но для совместимости со старыми паролями понимает и без соли.

*

RYUMASHKIN

  • Захожу иногда
  • **
  • 10
  • 0
Всем спасибо кто отозвался, нужно было просто плюнуть на все и отдохнуть денек.
После отдыха посмотрел=>почтила=>реализовал.