WebTolkRu
99 subscribers
618 photos
72 videos
2 files
643 links
Joomla-разработчик. Контрибьютер ядра Joomla. https://web-tolk.ru. Разработка Joomla на заказ. Также пишу в @JoomlaFeed.
@sergeytolkachyov Хабр: https://habr.com/ru/users/sergeytolkachyov/posts/
Download Telegram
WT Max библиотека для интеграции с Joomla v.0.2.0.1.

Joomla-библиотека для API мессенджера MAX с системным плагином для настроек и диагностики подключения. Библиотека предназначена для разработчиков.

v.0.2.0.1. Что нового?
- Форматирование сообщений при отправке через событие. Добавлена поддержка форматирования текста сообщений при отправке их через триггер события onWtmaxSendMessage.

- Страница расширения
- GitHub

@webtolkru

#joomla #max #messenger
Media is too big
VIEW IN TELEGRAM
👩‍💻 WT Max bot - JoomShopping - отправка заказов в чат или канал Max.

Плагин отправляет уведомления о заказах JoomShopping в мессенджер Max через библиотеку WT Max. Поддерживает отправку при создании заказа, после успешной оплаты или при переходе заказа в выбранный статус.

Также в плагине есть возможность задать шаблон сообщения в формате markdown и шаблон позиции товара в списке товаров.

Чат или канал Max для отправки можно выбрать прямо в параметре Max chat ID для заказов. Если в плагине чат или канал не выбран - будет использоваться чат или канал по умолчанию из настроек плагина библиотеки WT Max.

Страница расширения

@webtolkru

#joomla #joomshopping #max
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Вышел RISH 2.8.0: изоляция PHP, защита CRON и SFTP

Этот релиз появился после разбора реального взлома.

Сайт был скомпрометирован через уязвимость в установленной версии шаблона на базе Helix.

После очистки мы проверили, как злоумышленник пытался закрепиться на сервере.

Он добавил вредоносные задания в пользовательский CRON и собственный публичный ключ в authorized_keys. Это позволило бы вернуть доступ даже после удаления заражённых файлов.

Аудит показал, что нужно точнее разделить полномочия PHP-процесса и системного пользователя.

Главный принцип RISH 2.8.0:

PHP должен обслуживать сайт, но не управлять способом входа на сервер и не создавать себе постоянные задания.

Что изменилось?

🔒 Изоляция PHP-FPM

Для PHP-FPM добавлены ограничения systemd. Процесс сайта больше не получает доступ к домашним каталогам, системным устройствам, общим временным файлам, параметрам и журналам ядра, модулям, cgroups и механизмам повышения привилегий.

Ограничения действуют и для программ, запускаемых из PHP.

🔐 Учётные данные под контролем root

Пароли системного пользователя, MariaDB и администратора сайта перенесены из /home/<user>/.pass.txt в /root/rish/credentials/<user>.

Заодно вместо старого неочевидного формата появился понятный файл с отдельными секциями и комментариями.

⏱ Защита CRON

Изменять пользовательские CRON-задания теперь может только root. Существующие задания продолжают работать, а администратор по-прежнему управляет ими через меню RISH.

Код сайта больше не сможет самостоятельно назначить себе повторный запуск.

🔑 Защита SFTP

Публичные ключи перенесены из домашнего каталога пользователя в /etc/ssh/authorized_keys/<user> и принадлежат root.

При обновлении RISH переносит найденные ключи, не добавляя одинаковые строки, и показывает их отпечатки для проверки.

SFTP-сессии теперь работают только по ключу, без терминала, forwarding, пользовательских SSH-сценариев и произвольных команд.

🧩 Обновления расширений Joomla

В аудите Joomla появилась проверка доступных обновлений компонентов, модулей, плагинов и шаблонов.

RISH использует штатную Joomla CLI-команду и показывает установленную и доступную версии. Обновления автоматически не устанавливаются.

✅ Проверка и откат

Миграция выполняется последовательно. Новые параметры PHP-FPM и SSH проверяются до окончательного применения, а при ошибке RISH восстанавливает предыдущую конфигурацию.

Команда rish check получила проверки новой модели безопасности.

Подробно о причинах и всех изменениях RISH 2.8.0:

https://rish.su/blog/rish-2-8-0-izolyatsiya-php-zashchita-cron-i-sftp
👍2
Forwarded from Joomla Feed (Sergey Tolkachyov)
👩‍💻 Фильтр расширений Joomla: основное (ядро) и стороннее.

В полном списке расширений (раздел Система -> Расширения -> Управление) был замечен фильтр расширений: "основное - сторонее". Этот фильтр позволяет быстро посмотреть какие сторонние расширения числятся в Joomla, что особенно полезно в свете участившихся в последнее время проверок на прочность Joomla-сайтов.

@joomlafeed

#joomla
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3💯1
/
👍1
🚨 AJAX - главная «слепая зона» безопасности

В 2026 году продолжается волна атак на Joomla-сайты. Ботнеты массово сканируют сети в поиске одной и той же уязвимости — отсутствия проверки прав доступа в AJAX-обработчиках.

Почему com_ajax стал идеальным «черным ходом» для хакеров и как защитить свой код? Разбираем анатомию ошибки.

🔍 Как устроена уязвимость?

com_ajax создавался как легкий маршрутизатор, чтобы плагины и модули могли обрабатывать AJAX-запросы без создания собственных роутов.

Главный капкан архитектуры — com_ajax НЕ проверяет авторизацию за вас.

Разработчики часто путают три разных уровня защиты:

1. CSRF-токен (Session::checkToken()) — проверяет только то, что запрос отправлен с вашего сайта. Но он НЕ проверяет, кто его отправил.
2. Аутентификация ($user->guest) — проверяет, залогинен ли пользователь.
3. Авторизация (ACL / authorise()) — проверяет, имеет ли пользователь право выполнять действие.

💥 Реальные инциденты и уязвимости в Joomla:

• Astroid Framework: Отсутствие авторизации в AJAX-обработчиках позволяет гостям и пользователям с минимальными правами вызывать служебные функции.
• Novarian Framework: Аналогичные «слепые зоны» в AJAX-маршрутизации, открывающие доступ к выполнению кода без проверки ролей.
• JoomShaper Helix3 (Волна взломов AntonKill): Массовый дефейс Joomla-сайтов через неаутентифицированный AJAX-эндпоинт фреймворка шаблона.
• AcyMailing: Повышение привилегий из-за отсутствия проверки прав во внутреннем роутере (уязвимость затрагивает Joomla 9.11.0 – 10.8.1).

❌ Как делать НЕЛЬЗЯ (уязвимый код):

Session::checkToken() or die('Invalid Token');
$input = Factory::getApplication()->getInput();
$this->deleteItem($input->getInt('id'));


(Проверен только CSRF, но любой гость может удалить элемент).

✅ Как ДОЛЖНО быть (безопасный код):

Session::checkToken() or die('Invalid Token');

$app = Factory::getApplication();
$user = $app->getIdentity();

if (!$user->authorise('core.manage', 'com_yourcomponent')) {
throw new Exception('Access Denied', 403);
}

$this->deleteItem($app-> getInput()->getInt('id'));


🛠 Чек-лист базовой проверки:

• Если вы пишете код: Никогда не полагайтесь только на com_ajax. Всегда вызывайте $user->authorise() перед выполнением действия.
• Если вы администрируете сайты: Регулярно обновляйте фреймворки шаблонов (Astroid, Novarian, Helix) и сторонние расширения.
• Проверьте старый код: Наличие checkToken() в AJAX-хендлере не делает его безопасным!

📖 Подробную хронологию разбора этой уязвимости читайте в статье на mySites.guru.

💬 Проверяете ACL на каждом AJAX-вызове в своих компонентах и плагинах?

#joomla #php #security #webdev #cms #backend
🙏1
Обновление плагинов оплаты ЮKassa для RadicalMart и Phoca Cart 💳

Выпущены версии плагинов, обеспечивающих совместимость с актуальным ПО и свежими версиями Интернет-магазинов для Joomla.

📌 ЮKassa для RadicalMart 2.2.0
— Обеспечение совместимости с Joomla 6
Страница плагина

📌 ЮKassa для Phoca Cart 2.0.3
— Исправление ошибки округления цены со скидкой
— Обеспечение совместимости с Joomla 6
Страница плагина

ЮKassa (ранее Яндекс Касса) — один из самых популярных в России сервисов для приема платежей в интернет-магазинах и онлайн-школах. Предлагается Сбером в качестве Интернет-эквайринга для сайтов.

Новые клиенты могут получить премиум тариф со ставками 2,8% по методам: банковские карты, SberPay, кошелек ЮMoney, Alfa Pay и «Покупки в кредит» от СберБанка без ограничений по сроку.


Ну что же, гештальт закрыт ☀️
👍2
Не всё, что можно автоматизировать, стоит автоматизировать.
Интересные мысли здесь, и сам автор интересный.
Недавно я прочитал в Aeon эссе про skill nostalgia, тоску по навыку и ремеслу. По работе, где человек не просто выполняет операцию, а постепенно становится мастером. И вдруг увидел, что эта тоска сегодня повсюду: люди снова хотят печь хлеб, крутить керамику, писать от руки, снимать на плёнку, чинить вещи своими руками.
Со стороны это выглядит как мода на медленную жизнь. Но за этим стоит чувство поглубже: человеку не хватает работы, в которой он сам становится лучше.
Цифровая среда чаще устроена наоборот. Она дробит работу на короткие операции, съедает длинное внимание, ускоряет переключения и превращает меня в диспетчера процессов. ИИ эту тенденцию может разогнать до предела. Он убирает рутину, и это прекрасно. Но он же убирает сопротивление, через которое растёт навык, и вот это уже опасно.


https://pimenov.ai/articles/ne-vsyo-stoit-avtomatizirovat/

#ии
Сегодня планируется релиз безопасности RO CSVI. Готовимся.

@webtolkru

#joomla
👍2
👩‍💻 WT Yandex map items v.2.3.4.

Модуль выводит метки из различных компонентов на Яндекс.Карты. На данный момент выводятся только материалы Joomla. Используется API 3.0 Яндекс.Карт. Поддерживается Joomla 5 и старше.

👉 v.2.3.4. Что нового?
Стандартные всплывающие окна переведены на новый UI Яндекс.Карт. На мобильных устройствах они открываются как нижняя фиксированная панель и не выходят за пределы экрана; стили вынесены в CSS-классы и переменные для переопределения в шаблоне.


Страница расширения

@webtolkru

#joomla #yandex #яндекс #яндекскарты
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
👩‍💻 Фавиконки в шаблоне Joomla 6 - метод addHeadLink().

Давно я таким не занимался, а тут пришлось. Нередко сеошники измудряются и добавляют иконки как только могут, стараясь добиться результата. В то время как в Joomla есть прекрасный и понятный механизм добавления фавиконок - метод addHeadLink() в шаблоне.

$this->addHeadLink(
href: '/favicon.svg',
relation: 'icon',
relType: 'rel',
attribs: [
'type' => 'image/svg+xml',
'sizes' => 'any',
]
);

$this->addHeadLink(
href: '/favicons/favicon-32x32.png',
relation: 'icon',
relType: 'rel',
attribs: [
'type' => 'image/png',
'sizes' => '32x32',
]
);

$this->addHeadLink(
href: '/favicons/favicon-16x16.png',
relation: 'icon',
relType: 'rel',
attribs: [
'type' => 'image/png',
'sizes' => '16x16',
]
);

$this->addHeadLink(
href: '/favicons/apple-touch-icon.png',
relation: 'apple-touch-icon',
relType: 'rel',
attribs: [
'sizes' => '180x180',
]
);

$this->addHeadLink(
href: '/favicon.ico',
relation: 'icon',
relType: 'rel',
attribs: [
'type' => 'image/vnd.microsoft.icon',
]
);

$this->addHeadLink(
href: '/site.webmanifest',
relation: 'manifest',
relType: 'rel'
);

В PHP 8+ удобно использовать именованные аргументы и тогда сразу всё встаёт на свои места и становится понятно что за аргумент и зачем он нужен.
Традиционно Joomla собирает массивы в атрибуты, где ключ массива - это имя атрибута, а значение массива становится массивом атрибута. Удобно.

@webtolkru

#joomla #шаблоны #вёрстка
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Ужасть... 3 недели обсуждения в одном чате.

@webtolkru

#ai
👍2