Разработка сайта для IT и интеграции требует особого внимания к безопасности. В этом чек-листе AVOdigital собрала 10 критических шагов для защиты WordPress от взлома.
Разработка сайта для IT и интеграции на WordPress должна включать обязательные меры безопасности: регулярные обновления, сложные пароли, двухфакторную аутентификацию и мониторинг файлов. Следуя этому чек-листу, вы снизите риск взлома.
Архитектура безопасности WordPress: от ядра до периметра
Разработка сайта для IT и интеграции на WordPress — это не только функциональность, но и безопасность. В этой статье AVOdigital представляет чек-лист защиты от взлома, который поможет предотвратить атаки и утечки данных. Мы разберем основные уязвимости и способы их устранения, чтобы ваш сайт оставался надёжным даже при активных интеграциях.
1. Защита wp-admin: многофакторность и изоляция
Стандартный путь /wp-admin — первая цель брутфорса. Решение: изоляция через .htaccess (Apache) или Nginx config.
- IP-белый список: разрешаем доступ к wp-admin только с корпоративных IP или через VPN. Пример для Nginx:
location /wp-admin { allow 192.168.1.0/24; allow 10.0.0.1; deny all; } - Двухфакторная аутентификация (2FA): используем TOTP (Time-based One-Time Password) через OAuth-прокси или плагин с открытым кодом. Никогда не используйте SMS — он уязвим к SIM-swap.
- Смена URL wp-admin: через
wp-config.phpили Nginx rewrite. Не используйте плагины для этого — они создают дополнительную поверхность атаки. Лучше кастомный редирект:define('WP_ADMIN_DIR', 'secret-admin'); if ( !defined('ABSPATH') ) define('ABSPATH', dirname(__FILE__) . '/'); require_once(ABSPATH . 'wp-settings.php');
2. Права на файлы: минимальные привилегии
Стандартная ошибка — chmod 777 на всю папку wp-content. Это прямой путь к RCE. Правильная модель:
| Директория/Файл | Права (Linux) | Владелец | Комментарий |
|---|---|---|---|
| /wp-includes | 755 | root:www-data | Только чтение, без записи |
| /wp-admin | 750 | root:www-data | Доступ только через веб-сервер |
| /wp-content/uploads | 755 | www-data:www-data | Только для загрузки медиа |
| /wp-content/plugins | 755 | root:www-data | Запись только при обновлении через SSH |
| /wp-content/themes | 755 | root:www-data | Аналогично плагинам |
| wp-config.php | 600 | root:www-data | Критический файл — только чтение для веб-сервера |
| .htaccess | 644 | root:www-data | Только чтение, запись через CI/CD |
Настройка через SSH: find /var/www -type f -exec chmod 644 {} \; и find /var/www -type d -exec chmod 755 {} \;, затем исключения для wp-config.php и uploads.
3. Скрытие версии WordPress и REST API
Версия WP в исходном коде — карта для атакующего. Отключаем вывод:
- В
functions.phpтемы:remove_action('wp_head', 'wp_generator'); - Для REST API: отключаем ненужные эндпоинты через фильтр:
add_filter('rest_endpoints', function($endpoints) { if (isset($endpoints['/wp/v2/users'])) { unset($endpoints['/wp/v2/users']); } return $endpoints; }); - На уровне Nginx: блокируем доступ к
/wp-json/wp/v2/users:location ~ ^/wp-json/wp/v2/users { deny all; return 403; }
Важно: если используете JWT-аутентификацию (например, для headless WordPress), не блокируйте /wp-json/jwt-auth/v1/token.
4. Брутфорс-атаки: rate limiting и капча
Брутфорс — это перебор паролей к wp-admin. Защита на уровне сервера эффективнее плагинов.
- Nginx rate limiting: ограничиваем количество запросов к /wp-login.php:
limit_req_zone $binary_remote_addr zone=login:10m rate=1r/s; location /wp-login.php { limit_req zone=login burst=5 nodelay; try_files $uri =404; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; } - Fail2ban: мониторим логи Nginx и баним IP после 3 неудачных попыток. Джейл для WordPress:
[wordpress] enabled = true filter = wordpress logpath = /var/log/nginx/access.log maxretry = 3 bantime = 3600 - Cloudflare WAF: включаем «Under Attack Mode» и JS-челлендж для /wp-admin.
5. wp-config.php: ключевые константы
Файл wp-config.php — сердце безопасности. Обязательные настройки:
define('DISALLOW_FILE_EDIT', true);— отключает редактор кода в админке.define('WP_AUTO_UPDATE_CORE', 'minor');— только минорные обновления ядра.define('FORCE_SSL_ADMIN', true);— принудительный HTTPS для админки.define('WP_POST_REVISIONS', 5);— ограничение ревизий для снижения нагрузки на БД.- Соль и ключи аутентификации: генерируйте через генератор и меняйте каждые 6 месяцев.
6. Опыт AVOdigital: реальные кейсы
В нашей практике (AVOdigital) мы сталкивались с атаками на REST API через уязвимость в плагине WooCommerce. Решение: отключение ненужных эндпоинтов через кастомный middleware на Nginx и внедрение OAuth 2.0 для внешних интеграций. Второй кейс — брутфорс через XML-RPC (протокол CommerceML для 1С). Мы полностью отключили XML-RPC через .htaccess:
Order Deny,Allow Deny from all
И заменили его на кастомный REST API с JWT-токенами. Это снизило нагрузку на сервер.
Чек-лист безопасности WordPress
- Проверьте права на файлы: установите 644 для файлов, 755 для директорий, 600 для wp-config.php.
- Настройте wp-config.php: включите DISALLOW_FILE_EDIT, FORCE_SSL_ADMIN, обновите соли.
- Скройте версию WP: удалите wp_generator из header и заблокируйте /wp-json/wp/v2/users.
- Защитите wp-admin: настройте IP-белый список через Nginx или .htaccess, включите 2FA.
- Ограничьте брутфорс: настройте rate limiting (1 запрос в секунду) и Fail2ban.
- Отключите XML-RPC: если не используете CommerceML или Jetpack.
- Обновите всё: ядро, плагины, темы — только через SSH или CI/CD.
- Мониторинг: включите логирование неудачных попыток входа и настройте алерты в Telegram/Slack.
Частые вопросы
1. Какой плагин безопасности WordPress самый лучший?
Никакой. Плагины создают дополнительную поверхность атаки. Лучше использовать серверные методы: Nginx rate limiting, Fail2ban, правильные права на файлы. Если нужен UI — используйте Wordfence, но только для мониторинга, не для блокировки.
2. Как защитить WordPress от брутфорс-атак без плагинов?
Через Nginx: настройте limit_req_zone для /wp-login.php и /xmlrpc.php. Добавьте Fail2ban с джейлом для WordPress. Используйте Cloudflare WAF с JS-челленджем.
3. Нужно ли скрывать версию WordPress?
Да. Это снижает риск автоматизированных атак, нацеленных на конкретные уязвимости. Удалите wp_generator из header и заблокируйте REST API эндпоинты, которые возвращают версию.
4. Какие права на файлы должны быть у wp-config.php?
600 (rw-------). Владелец — root, группа — www-data. Это гарантирует, что веб-сервер может только читать файл, но не изменять его. Никогда не ставьте 777.
Часто задаваемые вопросы
Какие плагины безопасности обязательны для сайта IT-компании?
Для сайта IT-интеграции рекомендуем Wordfence, Sucuri Security и iThemes Security. Они блокируют атаки, сканируют вредоносный код и усиливают аутентификацию.
Как часто нужно обновлять WordPress и плагины для безопасности?
Обновляйте ядро WordPress и все плагины сразу после выхода патчей. Задержка более 48 часов увеличивает риск эксплуатации известных уязвимостей.
Что такое двухфакторная аутентификация и зачем она нужна на сайте IT-интеграции?
Двухфакторная аутентификация (2FA) требует второй код при входе. Она защищает админку даже при утечке пароля, что критично для сайтов с интеграциями и данными клиентов.
Как защитить сайт от DDoS-атак при разработке для IT?
Используйте CDN (Cloudflare), настройте лимиты запросов через плагины и включите защиту на уровне сервера. Это снизит нагрузку и предотвратит отказ в обслуживании.