Как я настраиваю безопасность WP, чтобы его не взломали
WordPress сам по себе не «дырявый», но почти всегда стоит криво: дефолтный логин admin, старые плагины, нет бэкапов. Делюсь минимальным набором, который я прохожу на каждом проекте, даже самом маленьком.
1. Обновления и «зоопарк» плагинов
Сначала смотрю:
- актуальны ли ядро, тема, плагины
- нет ли заброшенных плагинов (последнее обновление несколько лет назад)
- сколько всего плагинов висит
Что делаю:
- включаю автообновления хотя бы для минорных версий (ядро + плагины)
- удаляю неиспользуемые плагины и темы, а не просто выключаю
- критичные плагины (оплата, интеграции) обновляю через стейджинг и только потом в прод
Чем меньше кода, тем меньше потенциальных дыр.
2. Аккаунты и роли
Очень частая дыра — пользователи.
Мой чек-лист:
- убираю логин admin, создаю нового администратора с уникальным логином
- для контентщиков даю роль Editor, а не Administrator
- включаю двухфакторную аутентификацию хотя бы админам
- запрещаю регистрацию пользователей, если она реально не нужна
Захватить слабый пароль редактора гораздо проще, чем ломать сервак.
3. Конфигурация wp-config.php
В wp-config.php я настраиваю:
- сложные AUTH_KEY, SECURE_AUTH_KEY и остальные ключи (сервис генерации ключей от WordPress)
- define('DISALLOW_FILE_EDIT', true); — запрет редактирования файлов через админку
- define('WP_DEBUG', false); на продакшене, чтобы ошибки не вываливались наружу
По возможности:
- выношу wp-config.php на уровень выше web-root
- проверяю, что он не отдаётся по HTTP (решается конфигом сервера)
4. Ограничение брутфорса и доступов
Чтобы не ловить тысячи попыток логина:
- ставлю плагин с ограничением количества попыток (limit login attempts / captcha)
- включаю логирование входов и неудачных попыток
- при необходимости ограничиваю доступ к /wp-admin и /wp-login.php по IP или за дополнительным паролем на уровне сервера
5. Права на файлы и структуру
Минимум проверок:
- файлы — 644, папки — 755, никаких 777
- нет ли мусора в корне: старые бэкапы, .zip архивы, sql-дампы
- папка uploads не позволяет выполнять php-файлы (правится в .htaccess / конфиге nginx)
Любимый сценарий взлома — залить шелл в uploads и выполнить его.
6. Резервные копии и мониторинг
Даже при хорошей защите всегда держу план Б.
Что делаю:
- настраиваю регулярные бэкапы БД и файлов (хостинг / плагин / свой скрипт)
- бэкапы хранятся не на том же сервере, где крутится сайт
- завожу хотя бы простое оповещение: если сайт отдаёт не 200 — приходит сигнал
Без бэкапа любая атака или ошибка превращается в беду, а не в рабочий инцидент.
Чек-лист минимальной безопасности WordPress
- убраны неиспользуемые темы и плагины, всё обновлено
- нет логина admin, роли пользователей выданы по минимуму
- а wp-config.php стоят сложные ключи и отключён file edit
- продакшен не показывает ошибки PHP
- есть защита от перебора паролей и лог входов
- права на файлы адекватные, в uploads нельзя выполнить php
- есть регулярные бэкапы и понятный способ их восстановить
Итог
WordPress взламывают не потому, что он «плохой», а потому что его бросают без минимальной настройки. Пара часов на ревизию плагинов, ролей, wp-config.php, прав и бэкапов часто важнее, чем очередной «оптимизатор скорости». Один раз пройтись по этому чек-листу — и дальше вы уже развиваете проект, а не ждёте, когда он внезапно уедет в чужие руки.