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

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

Схема создания пароля в Joomla 3

 (Прочитано 684 раз)
0 Пользователей и 1 Гость смотрят эту тему.
shurakana
Живу я здесь
******

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

Сообщений: 862



« : 10.08.2015, 15:20:06 »

Всем привет!

Необходимо получить доступ к данным пользователя из другого приложения, но, я никак не пойму криптование пароля, по какой схеме происходит его создание?

UPD - В классе JUser посмотрел методы создания пароля, схема понятна вроде.

Но не нашел где происходит воссоздание пароля для сравнения, т.к. для создания вроде как используется рандом..
« Последнее редактирование: 10.08.2015, 15:40:54 от shurakana » Записан
icom
Завсегдатай
*****

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

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


« Ответ #1 : 10.08.2015, 15:50:29 »

"воссоздание пароля" не происходит, в базе по логину находится запись, дальше сравнивается пароль
примерно
if (md5('пароль_что_ввел_юзер_в_форму') == зашифрованный_пароль_из_базы)

к данным пользователя из другого приложения можно добраться через базу и без пароля
Записан
shurakana
Живу я здесь
******

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

Сообщений: 862



« Ответ #2 : 10.08.2015, 16:02:14 »

Все верно, но, в MySQL лежит такая запись = $2y$10$ZoNiLjxb.MRKZc1HJ.Z06OpaaybDCl7u9jNzanywre3MHtWnWXWjC

пароль "12345", в md5 = 827ccb0eea8a706c4c34a16891f84e7b

так вот, мне в приложении нужно воссоздать строку которая лежит в MySQL, для сравнения, чтобы в запросе посылать уже зашифрованный пароль..
Записан
robert
Профи
********

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

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


« Ответ #3 : 10.08.2015, 16:16:07 »

Прочитайте /libraries/joomla/user/ и /libraries/phpass.
Записан
shurakana
Живу я здесь
******

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

Сообщений: 862



« Ответ #4 : 10.08.2015, 18:54:52 »

Используется Bcrypt.. установил библиотеку JBcrypt, вроде все генерирует, но, каждый раз генерируется разный ключ с паролем
"12345", как и в Joomla так и в java, плюс разные префиксы в Joomla - $2y$, в java-$2a$

Мой мозг отказывается понимать как так может быть.. Как сравнивать то..
Записан
zomby6888
Живу я здесь
******

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

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


« Ответ #5 : 10.08.2015, 20:11:02 »

используется PHP метод password_hash
Записан
icom
Завсегдатай
*****

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

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


« Ответ #6 : 10.08.2015, 20:16:08 »

include('/libraries/phpass/PasswordHash.php');

$pass = '1111'; //пароль который ввел юзер
$hash = '$P$DXgd3syv8G6L9ee3.x8IOhTcJOxOjD.'; //хеш из поля password

$phpass = new PasswordHash(10, true);
$match = $phpass->CheckPassword($pass, $hash);

if ($match === true) {
   echo 'ok';
} else {
   echo 'error';
}
Записан
zomby6888
Живу я здесь
******

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

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


« Ответ #7 : 10.08.2015, 20:30:05 »

Код
$hash = JUserHelper::hashPassword(1111);
echo JUserHelper::verifyPassword(1111, $hash)? 'ok' : 'wrong password';
 
Записан
icom
Завсегдатай
*****

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

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


« Ответ #8 : 10.08.2015, 20:33:18 »

Код
$hash = JUserHelper::hashPassword(1111);
echo JUserHelper::verifyPassword(1111, $hash)? 'ok' : 'wrong password';
 
Цитировать
Необходимо получить доступ к данным пользователя из другого приложения
Записан
zomby6888
Живу я здесь
******

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

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


« Ответ #9 : 10.08.2015, 20:43:34 »

В таком случае инклудится класс juserhelper и passwordHash возможно и выполняется то же самое или подключается фреймворк. Все остальное костыли, которые перестанут работать в какой нибудь из версий
Записан
shurakana
Живу я здесь
******

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

Сообщений: 862



« Ответ #10 : 10.08.2015, 21:15:07 »

Т.е. получается что и в CheckPassword и в verifyPassword нет необходимости знать "соль" которая использовалась при хешировании? Просто дал хеш на проверку и все?

я просто сравниваю c md5, поэтому трудно понять что бывает по другому..
Записан
zomby6888
Живу я здесь
******

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

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


« Ответ #11 : 10.08.2015, 21:52:43 »

у метода password_hash соль по умолчанию генерируется рандомно, читайте описание функции
Записан
Fedor Vlasenko
Профи
********

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

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


Все начинается с Value


« Ответ #12 : 10.08.2015, 22:26:54 »

Необходимо получить доступ к данным пользователя из другого приложения, но, я никак не пойму криптование пароля, по какой схеме происходит его создание?
Все данные лежат в базе зачем вам данные пользователя?
Стучитесь в базу там все есть. Пароль нельзя дешифровать
Записан
shurakana
Живу я здесь
******

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

Сообщений: 862



« Ответ #13 : 11.08.2015, 00:05:31 »

у метода password_hash соль по умолчанию генерируется рандомно, читайте описание функции

В том то и дело все прочел, по мне так если не знать "соль" которая использовалась при хешировании то пароль не возможно повторить..


Все данные лежат в базе зачем вам данные пользователя?
Стучитесь в базу там все есть. Пароль нельзя дешифровать

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


UPD - Все, вроде разобрался с хешированием, проверку пароль проходит через password_verify, осталось только понять что с модификаторами $2a$ и $2y$, не могу понять где их задавать.. и что такое вообще blowjob и пр..)
« Последнее редактирование: 11.08.2015, 00:51:28 от shurakana » Записан
Fedor Vlasenko
Профи
********

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

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


Все начинается с Value


« Ответ #14 : 11.08.2015, 00:51:20 »

Зачем запросом передавать логин и пароль? Какая здесь логика? Для идентификации пользователя достаточно его $user_id
Код
JFactory::getUser()->load($user_id);
сделает пользователя авторизованным
Записан
shurakana
Живу я здесь
******

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

Сообщений: 862



« Ответ #15 : 11.08.2015, 01:03:55 »

Fedor, я запутался, либо мы про разное, либо хз..)

Грубо говоря, есть два разных сайта, с общей базой, первый сайт на том же сервере что и MySQL, второй на другом, так вот, я хочу посмотреть состояние своей корзины на втором сайте, мне же все равно придется вводить свой логин и пароль, чтобы получить данные из бд.. так?

Так вот, я вижу два варианта, либо отправлять как то "безопасно" - 12345, или сразу создавать хеш, и отправлять уже его. Я выбрал второй вариант. Но теперь при генерации отличаются модификаторы $2a$ и $2y$..
Записан
Fedor Vlasenko
Профи
********

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

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


Все начинается с Value


« Ответ #16 : 11.08.2015, 01:33:53 »

если база данных общая так в ней и берите все.
отправлять надо только код запроса.
если базы разные? то на одном создаете точку входа и в нем идентификацию по (придуманному паролю и логину, ключу) для получения данных. для пущей предосторожности прописываете разрешимый IP
шлете запросы, получаете ответы
Записан
zomby6888
Живу я здесь
******

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

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


« Ответ #17 : 11.08.2015, 01:37:52 »

Цитировать
проверку пароль проходит через password_verify

Все правильно шифруйте пароль с помощью password_hash, сверяйте с помощью password_verify. Есть только одно но.. Они поддерживаются версией php 5.5 и выше. Но есть библиотека: https://github.com/ircmaxell/password_compat/blob/master/lib/password.php (которая кстатии включена в последнии версии Joomla)
Записан
shurakana
Живу я здесь
******

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

Сообщений: 862



« Ответ #18 : 11.08.2015, 01:57:49 »

Все правильно шифруйте пароль с помощью password_hash, сверяйте с помощью password_verify. Есть только одно но.. Они поддерживаются версией php 5.5 и выше. Но есть библиотека: https://github.com/ircmaxell/password_compat/blob/master/lib/password.php (которая кстатии включена в последнии версии Joomla)

Да, я уж видел, думал даже что причина в недоделке этой библиотеки, т.к. на сервере стоит 5.3..

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

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

В итоге, я просто заменил все буквы "a" на "y" в методах JBcrypt, и все заработало, хеш созданный в приложении возвращает true при проверке в php..

Удивительно, но факт..)

Всем спасибо!

Всякой ерунды начитался, думал что так везде md5 и используется.. Вот например..
Записан
zomby6888
Живу я здесь
******

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

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


« Ответ #19 : 11.08.2015, 02:03:22 »

md5 вообще 128 битный алгоритм  и его начали ломать уже лет 10 как назад. Все правильно, ни в коем случае нельзя передавать пароли в чистом виде по сети.
Записан
voland
Профи
********

Репутация: +488/-86
Online Online

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


любит наш народ всякое гавно...


« Ответ #20 : 11.08.2015, 02:13:16 »

md5 вообще 128 битный алгоритм  и его начали ломать уже лет 10 как назад.
Ломать или брутфорсить\проверять по словарю?
Это вроде немного разные вещи.
Записан
zomby6888
Живу я здесь
******

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

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


« Ответ #21 : 11.08.2015, 02:24:00 »

Да уже способов взлома md5 дофига и больше. Погуглите, если интересно. Вот к примеру с того же хакер.ru https://xakep.ru/2013/10/13/md5-hack/
Так же там куча сатей о том как взломать md5 за 8 часов Azn
Записан
Страниц: [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