Новости Joomla

Joomla 6: Автоматические обновления ядра в Joomla

Joomla 6: Автоматические обновления ядра в Joomla

👩‍💻 Joomla 6: Автоматические обновления ядра в Joomla. В октябрьском номере официального журнала Joomla - Joomla Community Magazine вышла статья David Jardin, где рассказывается о внедрении функционала автоматического обновления ядра Joomla.❓Почему сейчас? Joomla же жила как-то 20 лет без автоматических обновлений?Это оказалась самая востребованная за последнее время от пользователей Joomla функция. Но, основная причина внедрения - проблемы безопасности. Всякий раз, когда в новой версии Joomla устраняется уязвимость, злоумышленники начинают анализировать код, чтобы выяснить, какая именно уязвимость была исправлена. И как только они это выясняют - начинается разработка автоматизированных скриптов для взлома как можно большего количества сайтов. Затем доступы к автоматически взломанным сайтам продаются в профильных чатах и ресурсах "пачками" по несколько сотен тысяч или миллионов сайтов. Ваш сайт могли взломать несколько лет назад, но воспользоваться уязвимостью могут не сразу, а тогда, когда у злоумышленников возникнет необходимость. И только после этого вы может быть узнаете об этом.Анализ патча, понимание проблемы и разработка скрипта требуют времени. И если владелец сайта не обновит его до истечения этого срока, сайт может быть взломан. А хакеры действуют быстро! Для критических, легко эксплуатируемых уязвимостей речь идёт о временном окне в 10–12 часов — и этого времени явно недостаточно, чтобы все успели обновить свои сайты.Здесь выходят на первый план автоматизированные обновления: проект Joomla теперь может активно устанавливать обновления (и, следовательно, исправления безопасности) на сайты, чтобы гарантировать, что сайты действительно обновляются вовремя.🕘 От первых идей до реализации прошло 5 лет. И здесь можно вспомнить, как в Joomla 5.1 внедрили TUF - The Update Framework, позволяющий устанавливать защищённое соединение между сайтом и сервером обновлений и исключает возможность supply chain attack (атаки на цепочку поставок).Об особенностях реализации и требованиях к сайту читаем подробнее в статье на JCM.@joomlafeed#joomla #secutiry #jcm

Первый выпуск журнала NorrNext в честь 20-й годовщины Joomla™

Первый выпуск журнала NorrNext в честь 20-й годовщины Joomla™

Первый выпуск журнала NorrNext в честь 20-й годовщины Joomla™. Интервью с волонтёрами 🎈Ну что, друзья, вот и настал этот долгожданный момент. Мы выпустили первое издание собственного журнала под эгидой NorrNext, который включает в себя интервью с видными деятелями сообщества из разных стран и континентов.Общий нарратив: показать, что нас объединяет (Joomla) и узнать больше о людях, которые вносят свой вклад в развитие платформы в своих сообществах. 20 лет — это много. Давайте же узнаем о коллегах 🎁 Первый цикл включает такие страны, как Австрия, Испания, Латвия, Россия, Румыния, Тайланд, Черногория, Чехия.⚙️ С кем интервью: ✔️ Владимир Елисеев 🇷🇺✔️ Дмитрий Рекун 🇱🇻✔️ Дмитрий Цымбал 🇷🇺✔️ Евгений Сивоконь 🇷🇺 ✔️ Сергей Толкачёв 🇷🇺✔️ Dénes Székely 🇷🇴✔️ Jan Pavelka 🇨🇿✔️ Miljan Vujosevic 🇲🇪✔️ Sergio Iglesias 🇪🇸✔️ Sigrid Gramlinger 🇦🇹✔️ Pisan Chueatchatchai 🇹🇭‼️ Новые интервью будут добавляться до конца декабря 2025. Заходите по ссылке время от времени💡👉 Читать далее

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

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Имею логин, пароль и email. Как программно создать/добавить пользователя, в группе Registered, сразу разблокированным, установив ему получение системный писем и не требовать сброс пароля при первом входе? Это нужно для синхронизации пользователей с 1С (в 1С добавляют нового, потом выгружают его на сайт), при импорте данных из XML.
*

varX

  • Живу я здесь
  • 2467
  • 141 / 5
  • разработка компонентов
Создаете объект
$user = new JUser;

Создаете массив данных
$data = array();
$data['email'] ='email';
$data['password'] ='password';
и т.д.

Дальше, если очень упрощенно:
$user->bind($data);
$user->save();
Разработка и ремонт. VirtueMart. JoomShopping. Свои компоненты. Принимаю заявки на plasma-web.ru.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Спс, попробую. Другие поля - аналогично, это понятно, а с группой доступа как?
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Не пробовал но возможно:
Код: php
JUserHelper::addUserToGroup('userid', 2);

Сработало вроде:
Код: php
$user = new JUser('id');
$user->sendEmail = 1;
$user->requireReset = 1;
$user->save();
JUserHelper::addUserToGroup('id', 2);
« Последнее редактирование: 13.11.2014, 01:59:09 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

varX

  • Живу я здесь
  • 2467
  • 141 / 5
  • разработка компонентов
Спс, попробую. Другие поля - аналогично, это понятно, а с группой доступа как?
Аналогично. По памяти, не глядя (мож изменилось уже что-то)
$data['groups'] =array($group);
Разработка и ремонт. VirtueMart. JoomShopping. Свои компоненты. Принимаю заявки на plasma-web.ru.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Аналогично. По памяти, не глядя (мож изменилось уже что-то)
$data['groups'] =array($group);
$data['groups'] =array(2); - пойдет?
*

varX

  • Живу я здесь
  • 2467
  • 141 / 5
  • разработка компонентов
$data['groups'] =array(2); - пойдет?
Попробуйте, должно.
Разработка и ремонт. VirtueMart. JoomShopping. Свои компоненты. Принимаю заявки на plasma-web.ru.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Сработало вроде:
Код: php
$user = new JUser('id');
$user->sendEmail = 1;
$user->requireReset = 1;
$user->save();
JUserHelper::addUserToGroup('id', 2);
Спс, попробую.
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
requireReset возможно наоборот в 0 надо установить..
интернет-блог: http://websiteprog.ru
*

varX

  • Живу я здесь
  • 2467
  • 141 / 5
  • разработка компонентов
Не пробовал но возможно:
Код: php
JUserHelper::addUserToGroup('userid', 2);

Сработало вроде:
Код: php
$user = new JUser('id');
$user->sendEmail = 1;
$user->requireReset = 1;
$user->save();
JUserHelper::addUserToGroup('id', 2);
Речь, насколько я понял, идет о создании нового пользователя. У него нет id. Впрочем, если не ошибаюсь, $user->save(); возвращает id созданного пользователя, поэтому можно и так приспособиться.
Разработка и ремонт. VirtueMart. JoomShopping. Свои компоненты. Принимаю заявки на plasma-web.ru.
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Ну да, если нового создавать то как-то так:
Код: php
$user = new JUser;
$user->sendEmail = 1;
$user->requireReset = 0;
$user->name = 'Вася';
$user->username = 'vasya';
$user->password = 'password';
$user->email = 'test@test.ru';
$user->save();
JUserHelper::addUserToGroup($user->id, 2);


Можно его еще авторизовать и залогинить для прикола)
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
А как быстро (без запроса) проверить, существует ли пользователь с указанным логином, и если да - вернуть его id? Чтобы гарантированно добавлять только несуществующего.
С запросом - не проблема, но хотелось бы по максимуму с использованием имеющихся встроенных средств api J.
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Мне кажется что никак, только запрос. Встроенные средства это лишние данные и более медленная обработка, в таких ситуациях гораздо полезнее ими пренебречь
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Пичально, но все же, как? протестирую скорость заодно )
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
А что тут тестировать прямой запрос всегда быстрее будет это же очевидно. Как будто методы api для получения данных не используют запросы. Что может быть быстрее чем:
Код: php
$db = JFactory::getDBO();
$query = "SELECT id FROM #__users WHERE username = ".$db->quote('vasya');
$db->setQuery($query);
if($id = $db->loadResult())
{
//делаем что -то с $id
}
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
ок, спс.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Код: php
$user = new JUser;
$user->sendEmail = 1;
$user->requireReset = 0;
$user->name = 'Vasya';
$user->username = 'vasya';
$user->password = 'password';
$user->email = 'test@test.ru';
$user->save();
JUserHelper::addUserToGroup($user->id, 2);
Это, к сожалению, не прокатило.

Код: php
          $user = new JUser;
          $data = array();
          $data['username'] = $item_login;
          $data['name'] = $item_name;
          $data['password'] = $item_pss;
          $data['email'] = $item_email;
          $data['sendEmail'] = 1;
          $data['requireReset'] = 0;
          $data['params'] = '{"admin_style":"","admin_language":"","language":"","editor":"","helpsite":"","timezone":""}';
          $user->bind($data);
          $user->save();
          JUserHelper::addUserToGroup($user->id, 2);
Это добавило пользователя и послало ему на почту письмо с логином и паролем, вот только пароль в базу не записался...
$item_pss содержит строку из латинских символов и цифр, 11 знаков, без пробелов и прочих знаков препинания.
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Пробовал указать $data['password'] = md5($item_pss); - пароль в базу записался, однако авторизация не проходит
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
может надо подтверждение пароля указать? var_dump($user->getErrors()) что выводит?
« Последнее редактирование: 14.11.2014, 11:53:47 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
посмотрел bind() в JUser, там действительно идет проверка:
Код: php
			if (isset($array['password2']) && $array['password'] != $array['password2'])
{
JFactory::getApplication()->enqueueMessage(JText::_('JLIB_USER_ERROR_PASSWORD_NOT_MATCH'), 'error');

return false;
}


ок.
указываю:
Код: php
          $data['password'] = $item_pss;
          $data['password2'] = $item_pss;
а вот фигвам: в базе пустое поле
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Warning: password_hash(): Password must be a string in F:\home\inform.local\www\libraries\compat\password\lib\password.php on line 30

а у меня в data['password'] == object(SimpleXMLElement)#375 (1) {
  • => string(11) "mfo20140206" }

ппц
« Последнее редактирование: 14.11.2014, 12:01:40 от AlekVolsk »
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
)) Поэтому наверное и не работал первый вариант. У меня он срабатывал..
интернет-блог: http://websiteprog.ru
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
У меня же импорт из XML идет в цикле ))) так работает:
Код: php
          $data['password'] = (string)$item_pss;
          $data['password2'] = $data['password'];

И ошибку не сразу видел, поскольку контроллер редирект делал обратно на вьюху
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Окончательный рабочий вариант:
          $user = new JUser;
          
$data = array();
          
$data['username'] = (string)$item_login;
          
$data['name'] = (string)$item_name;
          
$data['password'] = (string)$item_pss;
          
$data['password2'] = $data['password'];
          
$data['email'] = (string)$item_email;
          
$data['sendEmail'] = 1;
          
$data['requireReset'] = 0;
          
var_dump($data['password']);
          
$user->bind($data);
          
$user->save();
          
JUserHelper::addUserToGroup($user->id2);
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
Окончательный рабочий вариант:
Так лучше:
Код: php
$user = new JUser;
$userData = array( 'name' => (string)$item_name,
'username' => (string)$item_login,
'password' => (string)$item_pss,
'password2' => $data['password'],
'email' => (string)$item_email,
'sendEmail' => 1,
'requireReset' => 0,
'groups' => array( 2 )
);
$user->bind( $userData );
if ( $user->save() ) {
echo 'Пользователь ' . $user->username . ' успешно зарегестрирован!';
}
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
При добавлении более 250 пользователей (импорт данных из XML, в цикле):
Fatal error: Maximum execution time of 30 seconds exceeded in F:\home\inform.local\www\libraries\compat\password\lib\password.php on line 127

Можно этого избежать, делая паузу в выполнении цикла после, скажеи так, каждых 100 интераций цикла, чтобы избежать появления ошибки?
*

Aleks.Denezh

  • Живу я здесь
  • 3401
  • 428 / 4
set_time_limit(0);
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
В цикле или перед ним?
+ перед циклом вставил, работает, спс

+
При регистрации пользователя пишу:
$user = new JUser;
$userData = array( 'name' => (string)$item_name,
   'username' => (string)$item_login,
   'password' => (string)$item_pss,
   'password2' => (string)$item_pss,
   'email' => (string)$item_email,
   'sendEmail' => 0,
   'requireReset' => 0,
   'groups' => array( 2 )
);
$user->bind( $userData );
В настройках менеджера пользователей: Отсылать пароль    Нет
А письмо с паролем при регистрации все равно отсылается, как избежать?
« Последнее редактирование: 20.11.2014, 19:32:12 от AlekVolsk »
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
Если пользователь не добавился, как отловить ошибку, почему не добавился? А именно: отловить совпадающий email и некорректный логин
Код: php
$user->bind($userData);
if (!$user->save()) {
  // ?
}
*

AlekVolsk

  • Гуру
  • 6913
  • 416 / 4
В общем-то вышел из положения, выводя $user->_errors[0], но это системное сообщение, а хотелось бы свое.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Условия вывода блока div, поля пользователя?

Автор warlocksp

Ответов: 28
Просмотров: 923
Последний ответ 10.12.2020, 14:05:36
от gartes
Выбор группы пользователя при регистрации (аутентификации)

Автор Bartleby

Ответов: 10
Просмотров: 2094
Последний ответ 05.06.2013, 14:20:36
от Bartleby