WordPress — самая популярная CMS и самая атакуемая. 40% взломов происходят через устаревшие плагины. Этот чеклист закрывает 95% угроз.
1. Обновления — первый приоритет
- WordPress core — обновляйте немедленно
- Плагины и темы — еженедельно
- Удалите неиспользуемые плагины и темы
- Включите автообновления безопасности: Dashboard → Updates → Enable auto-updates
2. Защита wp-admin
# В .htaccess ограничить доступ к wp-admin по IP:
<Directory /var/www/site/wp-admin>
Order deny,allow
Deny from all
Allow from ВАШ_IP
</Directory>
- Смените URL входа: плагин WPS Hide Login
- Включите двухфакторку: плагин WP 2FA
- Ограничьте попытки входа: Limit Login Attempts Reloaded
3. wp-config.php — усиление
// Уникальные секретные ключи (генерация: https://api.wordpress.org/secret-key/1.1/salt/)
define('AUTH_KEY', 'уникальная_строка');
// Запретить редактирование файлов из админки:
define('DISALLOW_FILE_EDIT', true);
// Ограничить ревизии:
define('WP_POST_REVISIONS', 5);
// Запретить внешние HTTP-запросы (если не нужны):
// define('WP_HTTP_BLOCK_EXTERNAL', true);
4. Плагин безопасности
Установите один из:
- Wordfence — файрволл + сканер малвари + блокировка IP
- Sucuri Security — мониторинг целостности файлов
- iThemes Security — комплексная защита
5. Права на файлы
find /var/www/wordpress -type f -exec chmod 644 {} \;
find /var/www/wordpress -type d -exec chmod 755 {} \;
chmod 600 wp-config.php
Типичные ошибки и что они означают
| Сообщение | Причина | Что делать |
|---|---|---|
| Too many login attempts, please try again later | Плагин ограничения попыток входа заблокировал ваш IP после нескольких неверных паролей | Подождите таймаут (обычно 15–60 минут) или снимите блокировку в настройках плагина |
| This site may be hacked (в Google Search Console) | Google нашёл на сайте вредоносный редирект, спам-контент или внедрённый скрипт | Просканируйте файлы, удалите чужой код, запросите повторную проверку в Search Console |
| There has been a critical error on this website | Конфликт плагина безопасности с темой или другим плагином, чаще после обновления | Включите WP_DEBUG, найдите виновника в debug.log, отключите его через FTP или SSH |
| Invalid command 'RewriteEngine', perhaps misspelled | Правило из плагина безопасности попало в .htaccess, но модуль mod_rewrite в Apache выключен | Включите модуль: a2enmod rewrite && systemctl restart apache2 |
| 403 Forbidden при попытке войти по старому адресу /wp-admin/ | Это ожидаемое поведение плагина смены URL входа, а не ошибка | Используйте новый адрес входа, указанный в настройках WPS Hide Login |
Сравнение плагинов безопасности
| Плагин | Файрволл | Сканер малвари | Цена Pro-версии |
|---|---|---|---|
| Wordfence | Да, на уровне PHP до загрузки WordPress | Да, база сигнатур обновляется ежедневно | $119/год за сайт |
| Sucuri Security | Облачный WAF, отдельная платная услуга | Да, плюс мониторинг целостности файлов | $199/год за сайт |
| iThemes Security | Базовые правила уровня плагина | Ограниченный, без базы сигнатур | $99/год за один сайт |
Когда чеклиста недостаточно
Чеклист закрывает типовые угрозы, но есть ситуации, где нужны дополнительные меры:
- Уязвимость в собственном коде темы или плагина, написанного на заказ — нужен аудит исходного кода, а не готовый плагин безопасности
- Заражение через соседний сайт на том же shared-хостинге (cross-site contamination) — помогает только изоляция аккаунта или переход на VDS
- «Nulled»-версии платных плагинов и тем с бесплатных форумов — в них часто уже встроен бэкдор ещё до установки
- Компрометация учётной записи хостинга, FTP или панели регистратора домена — WordPress тут ни при чём, а сайт всё равно окажется взломан
Если сайт уже скомпрометирован, этот чеклист не поможет его вылечить — сначала нужна диагностика и очистка, как описано в статье «Взломан сайт: диагностика, очистка и восстановление». Общий чеклист безопасности сервера, на котором стоит WordPress, — в статье «Безопасность WordPress: полный чеклист защиты сайта».
Проверка результата
После применения чеклиста убедитесь, что защита действительно работает:
# Отключено ли редактирование файлов из админки
wp eval 'var_dump(defined("DISALLOW_FILE_EDIT") && DISALLOW_FILE_EDIT);'
# Права на wp-config.php должны быть 600 или 640, не 644
stat -c "%a %n" wp-config.php
# Старый адрес входа должен отдавать 404, а не форму логина
curl -s -o /dev/null -w "%{http_code}\n" https://example.com/wp-admin/
# Активные плагины безопасности через WP-CLI
wp plugin list --status=active | grep -i "wordfence\|sucuri\|ithemes"
Дополнительно поставьте fail2ban перед сервером — он банит IP по логам Nginx/Apache ещё до того, как запрос дойдёт до WordPress.