![Константин Обухов](/assets/images/avatars//110a0550edd7d611108f25a304c88186-64.jpg?t=1739725690)
Константин Обухов
С нами с 03 марта 2016; Место в рейтинге пользователей: #274Срочные исправления безопасности в MODX 2.5.2
Привет, друзья! У меня для вас отличная новость!
Команда MODX работала всю ночь не покладая рук, чтобы подготовить для нас срочный выпуск MODX 2.5.2, закрывающий все известные на сегодня уязвимости.
![](https://file.modx.pro/files/d/8/9/d89f08ef66205d1e030080f67b9deea4.png)
Команда MODX работала всю ночь не покладая рук, чтобы подготовить для нас срочный выпуск MODX 2.5.2, закрывающий все известные на сегодня уязвимости.
![](https://file.modx.pro/files/d/8/9/d89f08ef66205d1e030080f67b9deea4.png)
- Скрыты критичные системные настройки [#13170]
- Запрет возможности локального подключения файлов (LFE) [#13177]
- Запрет возможности подмены пути при запуске $modx->runProcessor [#13176]
- Запрет неавторизованного доступа к процессорам [#13175]
- Запрет подмены пути в параметре action объекта modConnectorResponse [#13173]
- Запрет слепой SQL инъекции при получении xPDOObject [подробности]
modMonitor. Кейс: поиск причины сброса кеша
Вот сейчас мне модмонитор сохранил кучу времени и нервных клеток. Хочу поделиться этим кейсом, так как он раскрывает весьма неочевидные, но при этом очень мощные возможности данного компонента.
Предыстория: клиент пишет, что показатели сайта в тестах гугла PageSpeed Insights низкие. Полез проверять. Обратил внимание, что гугл жалуется на долгий ответ от сервера (1.3 сек). Я удивился, так как перед тестом специально захожу на главную страницу, чтобы она закешировалась. Но нет, с каждым тестом как минимум на одной из версий (мобильной и обычной) долгий ответ. Здесь еще тонкость в том, что на сайте реализована отдельно мобильная версия и кеш у них раздельный. Полез опять в админку, проверяю настройки кеша где можно — везде все ОК. При этом проверяю кеш-файлы — а они постоянно сбрасываются, то есть для двух-трех документов они создаются, а потом сбрасываются.
Предыстория: клиент пишет, что показатели сайта в тестах гугла PageSpeed Insights низкие. Полез проверять. Обратил внимание, что гугл жалуется на долгий ответ от сервера (1.3 сек). Я удивился, так как перед тестом специально захожу на главную страницу, чтобы она закешировалась. Но нет, с каждым тестом как минимум на одной из версий (мобильной и обычной) долгий ответ. Здесь еще тонкость в том, что на сайте реализована отдельно мобильная версия и кеш у них раздельный. Полез опять в админку, проверяю настройки кеша где можно — везде все ОК. При этом проверяю кеш-файлы — а они постоянно сбрасываются, то есть для двух-трех документов они создаются, а потом сбрасываются.
Потенциальная уязвимость при получении объекта xPDO
Привет, друзья! Настало время подвести некоторые итоги по новости недельной давности.
Если кто не в курсе, в xPDO, а соотвественно, и в MODX обнаружилась уязвимость, позволяющая проводить слепые SQL инъекции и ломать сайты. Точнее как, обнаружилась… Всегда там была, и кому нужно — давно это знали.
Суть в том, что при получении объекта xPDO можно указать вторым параметром любую строку, и она не фильтруется.
Правда, про эту фичу нет ни слова в документации, где говорят только о
Если кто не в курсе, в xPDO, а соотвественно, и в MODX обнаружилась уязвимость, позволяющая проводить слепые SQL инъекции и ломать сайты. Точнее как, обнаружилась… Всегда там была, и кому нужно — давно это знали.
Суть в том, что при получении объекта xPDO можно указать вторым параметром любую строку, и она не фильтруется.
$modx->getObject('modResource', 'тут любой SQL код')
Этот код выполнит произвольный SQL запрос, потому что «фича, а не бага».Правда, про эту фичу нет ни слова в документации, где говорят только о
The criteria can be a primary key value, an array of primary key values (for multiple primary key objects) or an xPDOCriteria object.и никаких сырых SQL выражений.
![](https://file.modx.pro/files/7/d/3/7d35eb146dc6f35cca059a3b19e72148.jpg)
modMonitor 2+
Несмотря на то, что в MODX нашлись критические уязвимости, я продолжаю дальше разработку на своей любимой платформе, и надеюсь другие так же будут делать. Лично я ни на минуту не задумался на счет смены движка. Уверен, эти дыры залатаются, и все будут спать спокойно.
Сегодня я выкатил обновленную версию компонента modMonitor, который так же, возможно, кому-нибудь немного расстроил сон. Во всяком случае обсуждений было много.
Сегодня я выкатил обновленную версию компонента modMonitor, который так же, возможно, кому-нибудь немного расстроил сон. Во всяком случае обсуждений было много.
![](https://file.modx.pro/files/1/c/1/1c183279622a50cc97a8dd62b22147c7s.jpg)
Критическая уязвимость в MODX Revolution
Сильно в детали лезть не буду, просто скажу, что сейчас любой MODX Revo сайт потенциально уязвим. Дыра позволяет выполнить SQL-инъекции, в том числе с созданием на сайте привилегированных пользователей.
Базовые методы противодействия: подмена дефолтных системных папок (особенно connectors) и, главное — смена префикса таблиц. Так как далеко не все это делают, то можно сказать, большинство сайтов в зоне опасности. Кто хочет ощутить это на себе, может в комментах написать ссылку на сайт.
Если кто на уже рабочем сайте хочет префиксы сменить, я описывал метод здесь.
P.S. И еще заповедь: не пускайте никого в админку, даже с самыми минимальными правами. Это практически 100% гарантия взлома при желании.
Базовые методы противодействия: подмена дефолтных системных папок (особенно connectors) и, главное — смена префикса таблиц. Так как далеко не все это делают, то можно сказать, большинство сайтов в зоне опасности. Кто хочет ощутить это на себе, может в комментах написать ссылку на сайт.
Если кто на уже рабочем сайте хочет префиксы сменить, я описывал метод здесь.
P.S. И еще заповедь: не пускайте никого в админку, даже с самыми минимальными правами. Это практически 100% гарантия взлома при желании.
Минутка грамотности
Честно говоря, я вовсе не мастер русского языка, в школе перебивался с тройки на четвёрку. Но то, что я вижу в наших комментариях, просто приводит в уныние.
Давайте постараемся писать хоть немного грамотнее, всего несколько пунктов.
1. Самое наболевшее: тся\ться. Настолько всем надоело, что даже запустили отдельный сайт.
Давайте постараемся писать хоть немного грамотнее, всего несколько пунктов.
1. Самое наболевшее: тся\ться. Настолько всем надоело, что даже запустили отдельный сайт.
Ь ставится:
— В неопределённой форме глагола (инфинитиве): умывать(ся), беречь(ся).
— В окончании 2-го лица единственного числа настоящего или будущего времени: умываешь(ся), бережёшь(ся).
— После согласных (кроме «й» и «г» – ляг(те)) в формах повелительного наклонения: исправь(те).
— В возвратной частице (суффиксе), стоящей после гласного звука: вернусь, вернитесь, вернулись, вернувшись.
В остальных случаях в глагольных окончаниях ь не ставится: он пошёл умываться, но: он умывается
Выборка пользователей по определенным параметрам
Здравствуйте.
Нужно получить выборку активных (не забаненых и т.д.) пользователей, со всеми их полями, принадлежащих группе с id 4, от имени которых (createdby) существуют ресурсы, принадлежащие контексту moscow и опубликованные в данный момент.
Нужен нормальный запрос с $modx->newQuery(). Что бы потом можно было foreach $users… $user->get('username') получил имя пользователя, или например дополнительное поле пользователя extended.specialisation и другие.
Я вроде верно написал запрос в обычном синтаксисе, помогите пожалуйста с xPDO или как его зовут))
Нужно получить выборку активных (не забаненых и т.д.) пользователей, со всеми их полями, принадлежащих группе с id 4, от имени которых (createdby) существуют ресурсы, принадлежащие контексту moscow и опубликованные в данный момент.
Нужен нормальный запрос с $modx->newQuery(). Что бы потом можно было foreach $users… $user->get('username') получил имя пользователя, или например дополнительное поле пользователя extended.specialisation и другие.
Я вроде верно написал запрос в обычном синтаксисе, помогите пожалуйста с xPDO или как его зовут))
SELECT u.username, ua.* FROM `modx_users` as u
LEFT JOIN modx_member_groups as g ON g.member = u.id
LEFT JOIN modx_site_content as c ON c.createdby = u.id
LEFT JOIN modx_user_attributes as ua ON ua.internalKey = u.id
WHERE g.user_group = 4
AND c.published = 1
AND u.active = 1
AND c.context_key = 'moscow'
GROUP BY u.id
Спасибо заранее! Можно ли из плагина вызвать уведомление?
Добрый вечер, всем, кто нибудь подскажите —
сделал плагин на минимальную стоимость заказа — но как об этом уведомить на клиентской стороне покупателя, можно ли прям из плагина послать сообщение во всплывашку, идущую вместе с miniShop2?
Может метод есть какой-то? или надо в js лезть?
Код плагина
сделал плагин на минимальную стоимость заказа — но как об этом уведомить на клиентской стороне покупателя, можно ли прям из плагина послать сообщение во всплывашку, идущую вместе с miniShop2?
Может метод есть какой-то? или надо в js лезть?
Код плагина
if ($modx->event->name == 'msOnSubmitOrder'){
if($cart = $order->ms2->cart->status()) {
if($cart['total_cost'] < 1500) {
$modx->event->output('Сумма вашего заказа должна превышать 1500 руб!');
}
}
}
easyAuth [1.0.0-beta]
Добавление своих полей в форму заказа [обновлено]
При разработке нескольких проектов, возникала необходимость в получении дополнительных данных от покупателей, а полей в miniShop2 ограниченное количество. Поиск готового решения результата не дал, поэтому предлагаю свой вариант.
Решение обновлено, убраны правки исходного кода минишопа, теперь при обновлении ничего не затрется, изменены ключи у полей
Решалось это следующим образом:
1. Добавлялись необходимые поля, для примера взяты тип плательщика, название организации и инн.
2. Добавлялся плагин срабатывающий при сохранении заказа и при подключении js минишопа в админке.
3. Редактировались настройки и записи словарей.
Более подробно далее
Решение обновлено, убраны правки исходного кода минишопа, теперь при обновлении ничего не затрется, изменены ключи у полей
Решалось это следующим образом:
1. Добавлялись необходимые поля, для примера взяты тип плательщика, название организации и инн.
2. Добавлялся плагин срабатывающий при сохранении заказа и при подключении js минишопа в админке.
3. Редактировались настройки и записи словарей.
Более подробно далее