Аудит безопасности сайта на 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 или менее
# Права на папку uploads
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
# Система → Настройки → manager_login_startup_update = 0
# Проверить meta generator в 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 часов.







