Форум русской поддержки Joomla!® CMS
04.12.2016, 05:59:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

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

 (Прочитано 107 раз)
0 Пользователей и 1 Гость смотрят эту тему.
RYUMASHKIN
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 10


« : 02.10.2016, 10:03:16 »

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

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

Репутация: +431/-0
Offline Offline

Пол: Мужской
Сообщений: 5313


Крепитесь, други.


« Ответ #1 : 02.10.2016, 10:14:54 »

md5 поможет, если у вас в стороннем скрипте пароль хранится в открытом виде, если нет, то никак.
Записан
RYUMASHKIN
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 10


« Ответ #2 : 02.10.2016, 10:37:00 »

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

Репутация: +0/-0
Offline Offline

Сообщений: 10


« Ответ #3 : 02.10.2016, 11:14:04 »

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

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

Репутация: +134/-3
Offline Offline

Пол: Мужской
Сообщений: 2272



« Ответ #4 : 02.10.2016, 12:33:53 »

Arkadiy немного о другом говорил. Пароли в Joomla хранятся не просто в виде хеша с солью, там другой алгоритм. В Joomla 3 паролями занимается класс JCrypt. Проверить свой пароль можно так:
   
Код
<?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, 13:04:38 от SeBun » Записан
RYUMASHKIN
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 10


« Ответ #5 : 02.10.2016, 18:22:36 »

Arkadiy немного о другом говорил. Пароли в Joomla хранятся не просто в виде хеша с солью, там другой алгоритм. В Joomla 3 паролями занимается класс JCrypt. Проверить свой пароль можно так:
   
Код
<?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
Профи
********

Репутация: +794/-4
Offline Offline

Сообщений: 7738



« Ответ #6 : 02.10.2016, 18:46:50 »

ну вам же дали метод JUserHelper::verifyPassword($Password, $user->password, $user->id), ну посмотрите же его Azn ну не копировать же простыни кода, если файлы доступны всем. вам нужна часть, в которой участвует третий переданный параметр $user->id (запускается механизм перехеширования, если используемый алгоритм старый, например md5)
Записан
Arkadiy
Группа развития
*****

Репутация: +431/-0
Offline Offline

Пол: Мужской
Сообщений: 5313


Крепитесь, други.


« Ответ #7 : 02.10.2016, 20:26:08 »

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

Репутация: +0/-0
Offline Offline

Сообщений: 10


« Ответ #8 : 04.10.2016, 06:07:30 »

Всем спасибо кто отозвался, нужно было просто плюнуть на все и отдохнуть денек.
После отдыха посмотрел=>почтила=>реализовал.
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet