Аудит безопасности сайта на WordPress
Аудит безопасности — это не установка Wordfence и нажатие "Scan". Это систематическая проверка всех векторов атаки: устаревшего ПО, неправильных прав доступа, уязвимостей в коде тем и плагинов, конфигурации сервера, утечённых учётных данных.
Разведка: что видит атакующий
# Проверка с точки зрения внешнего наблюдателя
curl -I https://yourdomain.com/wp-json/
curl -s https://yourdomain.com/wp-json/wp/v2/users | python3 -m json.tool
# REST API по умолчанию раскрывает список пользователей
# Сканирование WPScan (специализированный инструмент)
wpscan --url https://yourdomain.com \
--enumerate u,p,t,cb \
--api-token YOUR_WPSCAN_TOKEN
# u - users, p - plugins, t - themes, cb - config backups
WPScan бесплатен для 25 API-запросов в сутки. Показывает: версию WordPress, список плагинов с версиями, известные CVE, перечисленных пользователей.
Контрольный список аудита
Версии и обновления:
- WordPress core — актуальная версия
- Все плагины — актуальные версии
- PHP — 8.1+, PHP 7.x — EOL с декабря 2022
- MySQL/MariaDB — актуальная версия
Аутентификация:
- Логин
adminне используется - Пароли администраторов: проверить haveibeenpwned.com
- 2FA включена для всех администраторов
- Попытки подбора пароля блокируются (rate limiting)
- XML-RPC отключён или защищён
Файловые права:
# Правильные права
find /var/www/yourdomain.com -type d -exec chmod 755 {} \;
find /var/www/yourdomain.com -type f -exec chmod 644 {} \;
chmod 600 /var/www/yourdomain.com/wp-config.php
# Проверить файлы с подозрительными правами
find /var/www/yourdomain.com -type f -perm /o+w
find /var/www/yourdomain.com -name "*.php" -newer /var/www/yourdomain.com/wp-config.php
Конфигурация WordPress:
// Что должно быть в wp-config.php
define('DISALLOW_FILE_EDIT', true);
define('DISALLOW_FILE_MODS', true); // блокирует установку плагинов
define('WP_DEBUG', false); // не в production
define('WP_DEBUG_DISPLAY', false);
define('FORCE_SSL_ADMIN', true);
Раскрытие информации:
-
readme.html,license.txt,wp-config-sample.phpудалены - Версия WordPress скрыта из HTML и RSS
- Заголовок
X-Powered-Byудалён - Листинг директорий отключён (Nginx:
autoindex off)
REST API:
// Скрыть список пользователей из REST API
add_filter('rest_endpoints', function (array $endpoints): array {
if (isset($endpoints['/wp/v2/users'])) {
unset($endpoints['/wp/v2/users']);
unset($endpoints['/wp/v2/users/(?P<id>[\d]+)']);
}
return $endpoints;
});
Анализ кода на уязвимости
# PHPCS с WordPress Coding Standards
composer require --dev squizlabs/php_codesniffer wp-coding-standards/wpcs
vendor/bin/phpcs --standard=WordPress-Security wp-content/themes/my-theme/
# Поиск потенциально опасных функций
grep -r "eval(" wp-content/themes/ wp-content/plugins/
grep -r "base64_decode(" wp-content/themes/ wp-content/plugins/
grep -r "system(" wp-content/themes/ wp-content/plugins/
grep -r "\$_GET\[" wp-content/themes/ wp-content/plugins/ | grep -v "sanitize\|esc_"
Проверка .htaccess / Nginx конфигурации
# Обязательные блоки в Nginx
location ~ /\.(ht|git|svn) { deny all; }
location = /wp-config.php { deny all; }
location ~* /(?:uploads|files)/.*\.php$ { deny all; }
location = /xmlrpc.php { deny all; }
# Заголовки безопасности
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
SSL и заголовки
# Проверка SSL конфигурации
testssl.sh --full https://yourdomain.com
# Проверка security headers
curl -I https://yourdomain.com | grep -i "x-content\|x-frame\|strict-transport\|content-security"
Что входит в отчёт
После аудита клиент получает:
- Список найденных уязвимостей с оценкой критичности (Critical/High/Medium/Low)
- Конкретные рекомендации по устранению каждой
- Приоритизированный план исправлений
- Чеклист превентивных мер
Сроки
Аудит безопасности WordPress-сайта с подготовкой отчёта — 1–2 дня. Устранение выявленных проблем — зависит от количества и сложности.







