Аудит безпеки сайту на MODX
MODX Revolution має хорошу базову безпеку — коннектори захищені токенами, панель управління (/manager/) закрита від ботів. Тим не менше застарілі Extra, неправильні права файлів та кастомний код створюють вразливості.
Сканування
# CMS-специфічний сканер
python3 -m drupwn --mode detect https://yourdomain.com # немає MODX-специфічного, використовуємо загальні
# Nikto
nikto -h https://yourdomain.com
# Dirbusting (пошук прихованих файлів)
ffuf -w /usr/share/wordlists/dirb/common.txt -u https://yourdomain.com/FUZZ
Контрольний список
Файлова структура:
# Core вище web-root?
ls /var/www/yourdomain.com/core/ # НЕ повинно бути (якщо перенесено)
# Права на config.core.php
stat /var/www/yourdomain.com/config.core.php
# 644 або менше
# Права на папку assets
find /var/www/yourdomain.com/assets/ -name "*.php" -type f
# PHP-файли в assets — ознака взлому
# Тимчасові файли установника
ls /var/www/yourdomain.com/setup/ # не повинно існувати після встановлення
Защита Nginx для MODX:
# Закрити системні директорії
location ~ /(core|manager/includes)/ { deny all; }
location ~ /config\.core\.php$ { deny all; }
# Заборонити PHP в assets (завантажені файли)
location ~* /assets/.*\.(php|phtml|php3)$ { deny all; }
# Обмежити доступ до менеджера
location /manager/ {
allow 1.2.3.4; # ваш IP
deny all;
}
Версія MODX:
# Приховати версію MODX з HTML
# System → Settings → manager_login_startup_update = 0
# Перевірити мета-генератор в HTML:
curl -s https://yourdomain.com/ | grep -i "modx\|meta.*generator"
Системні настройки безпеки:
session_cookie_secure: Так (тільки HTTPS)
session_cookie_httponly: Так
session_cookie_samesite: Strict
failed_login_attempts: 5 (лімітація спроб входу)
blocked_minutes: 60 (блокування після перевищення)
Перевірка Extra на вразливості: Реєстр вразливостей MODX: немає централізованого, але перевіряємо версії в Package Manager. Застарілі Extra з відомими вразливостями: FormLister (застарілий, краще FormIt), деякі версії Ajaxform.
Кастомний код — SQL Injection:
grep -r "\\\$_GET\|\\\$_POST" core/components/myextra/
grep -r "->query\|->exec" core/components/myextra/ | grep -v "prepare\|quote"
// Небезпечно:
$db->query("SELECT * FROM table WHERE id = " . $_GET['id']);
// Правильно:
$c = $modx->newQuery('MyObject');
$c->where(['id' => (int)$_GET['id']]);
Захист CSRF: MODX використовує connector-токени для захисту від CSRF у Connector-запитах. Переконатися, що кастомні коннектори не обходять цю перевірку.
Заголовки безпеки
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'" always;
add_header Strict-Transport-Security "max-age=31536000" always;
Терміни
Аудит безпеки MODX-сайту зі звітом — 1 день. Усунення виявлених проблем — 4–8 годин.







