Новости Joomla

Человек на GitHub ускорил Joomla в 600 раз на объёме 150к+ материалов в 1700+ категориях

Человек на GitHub ускорил Joomla в 600 раз на объёме 150к+ материалов в 1700+ категориях

👩‍💻 Человек на GitHub ускорил Joomla в 600 раз на объёме 150к+ материалов в 1700+ категориях. На старте его сайт на Joomla 3 вообще не смог обновиться на Joomla 5. Пришлось делать экспорт/импорт материалов. Проделав всё это он запустил-таки этот объём данных на Joomla 5. Тестовый скрипт грузил 200 материалов из этого объёма всего за 94 секунды ))) А главная страница с категориями грузилась 20 секунд. Добавив индекс для таблицы #__content

CREATE INDEX idx_catid_state ON #__content (catid, state);
он сократил время загрузки категорий до 1 секунды. Затем наш герой решил поковырять SQL-запрос в ArticleModel, который отвечает за выборку материалов. И решил заменить тип JOIN на STRAIGHT_JOIN для категорий.
// ->from($db->quoteName('#__content', 'a'))->from(    $db->quoteName('#__content', 'a')    . ' STRAIGHT_JOIN ' . $db->quoteName('#__categories', 'c')    . ' ON ' . $db->quoteName('c.id') . ' = ' . $db->quoteName('a.catid'))// ->join('LEFT', $db->quoteName('#__categories', 'c'), $db->quoteName('c.id') . ' = ' . $db->quoteName('a.catid'))
Что сократило загрузку 200 материалов из 150к с 94 секунд до 5. К слову сказать, боевой сайт на Joomla 3 крутится на 12CPU 64GB рамы. А все манипуляции с кодом он делает на базовом 1CPU 1GB сервере и замеры скорости даны именно для базового сервера. Но это всё в дискуссии, хотя в идеале должно вылиться в Pull Requests. Мы - Open Source сообщество, где никто никому ничего не должен. Джунгли. Но человек ищет пути оптимизации Joomla и предлагает решения. Если оказать поддержку и предложить помощь хотя бы с тестированием самых разнообразных сценариев, то возможно эти улучшения смогут войти в ядро. Пусть не быстро, пусть через несколько лет, пусть не все, но войдут. Достаточно предложить руку помощи и приложить немного усилий.
Дискуссию на GitHub можно почитать здесь.@joomlafeed#joomla #community #php

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

SalityGEN

  • Захожу иногда
  • 209
  • 7 / 1
  • Делаю мир лучше
если у вас блог то да
а если что то иное портал доска или магазин то на четверке еще нет необходимого инструментария
Причем тут блог? Там вообще не важно что у вас, дыра в самой системе
--
UPD: А я понял, на 4ку не удобно переходить?
Перенесу ВАШУ joomla на версию 4 за мани))
« Последнее редактирование: 16.10.2021, 15:46:01 от SalityGEN »
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
В этих версиях обнаружены RCE (произвольное выполнение кода)
Приведу не критичное доказательство
И ?
*

SalityGEN

  • Захожу иногда
  • 209
  • 7 / 1
  • Делаю мир лучше
И ?
Я критичное приводить здесь не буду, в целях безопасности.
А то что показано на скринах, простым языком, в логи попала запись о выходе из админки пользователя который никогда туда не заходил, это благодаря токену который дается во вьюхе которую я не должен был увидеть.
Это всего лишь самое начало, дальше раскрутили это в RCE, создали админа этим багом, поместили его в группу этим багом, зашли в админку, создали файл php с шеллом.
*

SalityGEN

  • Захожу иногда
  • 209
  • 7 / 1
  • Делаю мир лучше
Попробуйте сами:
1) Разлогиньтесь
2) перейдите по ссылке: http://ваш_домен/administrator/index.php?option=com_media&folder=&format
3) Нажмите кнопку выйти
4) Залогиньтесь в админку как обычно, и посмотрите на логи
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Не верю, иначе уже давно бы с помощью AJAX взломали бы все Joomla
Цитировать
Токены используются для защиты форм от спамовых атак. Однажды токен
был сгенерирован, система проверит почтовый запрос, чтобы узнать, он присутствует, в противном случае он сделает сеанс недействительным.
Код
public static function getFormToken($forceNew = false)
{
$user    = \JFactory::getUser();
$session = \JFactory::getSession();

return ApplicationHelper::getHash($user->get('id', 0) . $session->getToken($forceNew));
}
« Последнее редактирование: 16.10.2021, 16:22:54 от draff »
*

SalityGEN

  • Захожу иногда
  • 209
  • 7 / 1
  • Делаю мир лучше
Не верю, иначе уже давно бы с помощью AJAX взломали бы все Joomla
ну 0day не так часто находят, осталось подождать когда на эту ветку наткнутся заинтересованные люди.
И кстати, лучшая компрометация сервера это та компрометация которой не видно, все может уже произошло, но очень очень тихо)
*

SalityGEN

  • Захожу иногда
  • 209
  • 7 / 1
  • Делаю мир лучше
в общем всем "спокойной ночи"  ;D
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
ну 0day не так часто находят, осталось подождать когда на эту ветку наткнутся заинтересованные люди.
Даже Google уже знает
Код
&format=raw&'. JUtility::getToken().'=1'
*

SalityGEN

  • Захожу иногда
  • 209
  • 7 / 1
  • Делаю мир лучше
Не верю, иначе уже давно бы с помощью AJAX взломали бы все Joomla
Код
public static function getFormToken($forceNew = false)
{
$user    = \JFactory::getUser();
$session = \JFactory::getSession();

return ApplicationHelper::getHash($user->get('id', 0). $session->getToken($forceNew));
}
Токен это одно из составляющих для атаки, суть в том что в логи попадает и не только
*

SalityGEN

  • Захожу иногда
  • 209
  • 7 / 1
  • Делаю мир лучше
Даже Google уже знает
Код
&format=raw&'. JUtility::getToken().'=1'

Ответил в лс
*

ProtectYourSite

  • Живу я здесь
  • 2368
  • 139 / 4
  • Безопасность вебсайтов
Подпишусь, надо будет на днях проверить?
Главный вопрос, откуда берется токен?
*

SalityGEN

  • Захожу иногда
  • 209
  • 7 / 1
  • Делаю мир лучше
Есть быстрофикс!

Запретите этот параметр GET запроса
/administrator/index.php?option=com_media&folder=&format
На какое то время поможет прикрыть форточку, но все таки задумайтесь над обновлением, по мимо этого бага там еще и роутинг кривой
« Последнее редактирование: 16.10.2021, 18:30:23 от SalityGEN »
*

SalityGEN

  • Захожу иногда
  • 209
  • 7 / 1
  • Делаю мир лучше
В .htaccess

После строки
RewriteEngine On

Прописать вот это
RewriteCond %{QUERY_STRING} format [NC]
RewriteRule ^.*$ - [R=404,L]
« Последнее редактирование: 16.10.2021, 18:25:34 от SalityGEN »
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
В com_media отдает 403, но почему форма выводится, не искал .
Код
// Access check.
if (!$user->authorise('core.manage', 'com_media') && (!$asset || (!$user->authorise('core.edit', $asset)
&& !$user->authorise('core.create', $asset)
&& count($user->getAuthorisedCategories($asset, 'core.create')) == 0)
&& !($user->id == $author && $user->authorise('core.edit.own', $asset))))
{
throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403);
}
Исправить , чтобы не подключало лишние плагины, строка 1007
Код
if( empty($parameters['username']) ) {
return false;
}
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
товарищи, объясните, плиз, для чайников, кому стоит бояться и чего делать?
эта дыра на всех действует или только для сайтов, в которых есть несколько юзеров с разными правами? т.е. баг с повышением прав?
и как фиксить, если не через htaccess (просто format часто используется в скриптах, например, чтобы получать содержимое страницы)
*

SalityGEN

  • Захожу иногда
  • 209
  • 7 / 1
  • Делаю мир лучше
В com_media отдает 403, но почему форма выводится, не искал .
Код
// Access check.
if (!$user->authorise('core.manage', 'com_media') && (!$asset || (!$user->authorise('core.edit', $asset)
&& !$user->authorise('core.create', $asset)
&& count($user->getAuthorisedCategories($asset, 'core.create')) == 0)
&& !($user->id == $author && $user->authorise('core.edit.own', $asset))))
{
throw new JAccessExceptionNotallowed(JText::_('JERROR_ALERTNOAUTHOR'), 403);
}
Исправить , чтобы не подключало лишние плагины, строка 1007
Код
if( empty($parameters['username']) ) {
return false;
}
com_media был для примера, он не причем! подойдет любой com_
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
com_media был для примера, он не причем! подойдет любой com_
Так проверяйте на любом. Я дал решение, не нравится не применяйте .
Будете ли Вы переходить с Joomla 3.x на Joomla 4?
*

voland

  • Легенда
  • 11026
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
RewriteCond %{QUERY_STRING} format [NC]
RewriteRule ^.*$ - [R=404,L]
Тогда уж
Код
RewriteCond %{QUERY_STRING} &format [NC]
RewriteRule ^.*$ - [R=404,L]
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
, объясните, пожалуйста, для чайников, кому стоит бояться и чего делать?
трабл в плагине user/joomla , нужно чтобы возвращал false , is true
   public function onUserLogout($user, $options = array())
   {
      $my      = Factory::getUser();
      $session = Factory::getSession();

      // Make sure we're a valid user first
      if ($user['id'] == 0 && !$my->get('tmp_user'))
      {
         return true;
      }
Чтобы потом не срабатывал код, откуда наверно и пишутся логи
      
Код
// OK, the credentials are built. Lets fire the onLogout event.
$results = $this->triggerEvent('onUserLogout', array($parameters, $options));

// Check if any of the plugins failed. If none did, success.
if (!in_array(false, $results, true))
{
$options['username'] = $user->get('username');
$this->triggerEvent('onUserAfterLogout', array($options));

return true;
}
Мое решение исключает подключение в плагины.
Будете ли Вы переходить с Joomla 3.x на Joomla 4?
« Последнее редактирование: 17.10.2021, 16:45:13 от draff »
*

SalityGEN

  • Захожу иногда
  • 209
  • 7 / 1
  • Делаю мир лучше
У нас на форуме есть люди @Progreccor которые считают что я развожу истерику, считаю минус не заслуженным, и однажды, я уберу его не зарепортив баг который найдется и на этом форуме.
« Последнее редактирование: 16.10.2021, 20:14:07 от SalityGEN »
*

b2z

  • Глобальный модератор
  • 7287
  • 778 / 0
  • Разраблю понемногу
Вместо того, чтобы публично обсуждать уязвимость, лучше отправить команде безопасности Joomla сообщение о найденной уязвимости:

https://developer.joomla.org/security/contact-the-team.html

Это наиболее верный и корректный путь в мире программного обеспечения.
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
обсуждать уязвимость,
Смотрите мой пост выше Будете ли Вы переходить с Joomla 3.x на Joomla 4?
Вспомните сколько было вопросов, что в админке два админа светятся .
*

setitle

  • Осваиваюсь на форуме
  • 14
  • 0 / 0
Есть быстрофикс!

Запретите этот параметр GET запроса
/administrator/index.php?option=com_media&folder=&format
На какое то время поможет прикрыть форточку, но все таки задумайтесь над обновлением, по мимо этого бага там еще и роутинг кривой
В чем проблема поставить пароль на папку administrator?? Да еще и по белому списку IP. Никто лишний не будет ломиться и не страшны никакие уязвимости.
в корне хостинга
<Files .htpasswd>
   deny from all
</Files>
и файл с паролем.
----
в папке administrator
    <Files index.php>
    order deny,allow
    deny from all
    #паша
   allow from 199.0.99.12
   #маша
   allow from x.x.x.x
   #илья
   allow from x.x.x.x/x
   #михаил
   allow from x.x.x.x
   #обама
   allow from x.x.x.x
    </files>
   
AuthType Basic 
AuthName "Private zone. Only for administrator!"
AuthUserFile      /var/www/xxxxxx/data/account_name/.htpasswd 
require user admin root
-------------
ну Google подробнее расскажет.
и все. пусть хоть заломятся. даже если пароль сломают, то IP точно не подберут :)))
*

SalityGEN

  • Захожу иногда
  • 209
  • 7 / 1
  • Делаю мир лучше
В чем проблема поставить пароль на папку administrator?? Да еще и по белому списку IP. Никто лишний не будет ломиться и не страшны никакие уязвимости.
в корне хостинга
<Files .htpasswd>
   deny from all
</Files>
и файл с паролем.
----
в папке administrator
    <Files index.php>
    order deny,allow
    deny from all
    #паша
   allow from 199.0.99.12
   #маша
   allow from x.x.x.x
   #илья
   allow from x.x.x.x/x
   #михаил
   allow from x.x.x.x
   #обама
   allow from x.x.x.x
    </files>
   
AuthType Basic 
AuthName "Private zone. Only for administrator!"
AuthUserFile      /var/www/xxxxxx/data/account_name/.htpasswd 
require user admin root
-------------
ну Google подробнее расскажет.
и все. пусть хоть заломятся. даже если пароль сломают, то IP точно не подберут :)))
Можно, но не у всех может оказаться апач нужной версии, в некоторых версиях есть атака на http basic auth
Вроде в 2.18.49 - 2.18.50 версиях. А так да, тоже норм вариант.
« Последнее редактирование: 17.10.2021, 23:08:25 от SalityGEN »
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Можно, но не у всех может оказаться апач нужной версии, в некоторых версиях есть атака на http basic auth
Применение тактики запугивания манюпаса набором из античата .
SSL в помощь .
*

SalityGEN

  • Захожу иногда
  • 209
  • 7 / 1
  • Делаю мир лучше
Применение тактики запугивания манюпаса набором из античата .
SSL в помощь .
Да, с SSL эти баги на апач становятся еще интереснее   ;D
Я никого не запугиваю а призываю обновляться, и разрабатывать свои проекты с учетом перехода на обновления.
Все обновы окружения выходят не только ради каких то новых плюшек, там еще и дыры латают.
Кстати могу провести аудит безопасности ваших проектов. (нужен только домен)
--
Информация для тех, кто использует сторонние компоненты и не может обновиться:
Вы сознательно установили софт который не знаете как работает получив при этом технический долг и теперь все зависит от сторонних разработчиков.
« Последнее редактирование: 18.10.2021, 11:37:02 от SalityGEN »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Журнал о Joomla от NorrNext. Выпуск в честь 20-ти летия Joomla. Интервью

Автор Sulpher

Ответов: 6
Просмотров: 465
Последний ответ 01.11.2025, 00:12:24
от Sulpher
Joomla 6

Автор bormir

Ответов: 4
Просмотров: 459
Последний ответ 27.10.2025, 15:50:37
от Sulpher
RSFirewall нашел в Joomla 4 какой-то подозрительный файл

Автор web1

Ответов: 20
Просмотров: 2840
Последний ответ 18.10.2025, 20:54:25
от wishlight
Сделал шаблон для Joomla 5

Автор fbr

Ответов: 9
Просмотров: 2095
Последний ответ 15.10.2025, 16:49:33
от fbr
Как вставить видео с rutube в Joomla 5,?

Автор Северянин23

Ответов: 12
Просмотров: 3216
Последний ответ 15.08.2025, 12:45:55
от web1