Аудит безпеки сайту на 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
# Перевірка заголовків безпеки
curl -I https://yourdomain.com | grep -i "x-content\|x-frame\|strict-transport\|content-security"
Вміст звіту
Після аудиту клієнт отримує:
- Список виявлених вразливостей з оцінкою критичності (Critical/High/Medium/Low)
- Конкретні рекомендації з усунення кожної
- Пріоритизований план усунення
- Контрольний список превентивних заходів
Терміни
Аудит безпеки WordPress-сайту з підготовкою звіту — 1–2 дні. Усунення виявлених проблем — залежить від кількості та складності.







