Безопасность WordPress: базовая защита сайта за час

Пять шагов на час работы: обновления, вход с двухфакторной аутентификацией, настройки wp-config.php, права на файлы и защита сервера. С командами и чеклистом.

Сайт под защитным куполом, от которого отскакивают вредоносные боты

WordPress не делает сайт уязвимым сам по себе. Ядро системы проверяют тысячи разработчиков, и серьёзные уязвимости в нём редки. Проблемы приходят из другого места: из плагина, который не обновлялся полгода, пароля admin123 и файлов, открытых на запись всем подряд.

Коротко

Что сделаем за час

  • Включим автообновления и уберём лишние плагины
  • Закроем вход двухфакторной аутентификацией
  • Выставим права на файлы и запретим PHP в uploads
  • Настроим файрвол, SSH по ключу и fail2ban

Главные риски

  • Плагины: в них 91% найденных уязвимостей
  • Логин admin и слабые пароли
  • Файлы, открытые на запись всем
  • Массовые атаки на свежие уязвимости начинаются в течение часов
  1. Шаг 1Обновления10 мин
  2. Шаг 2Учётные записи и вход15 мин
  3. Шаг 3Настройки WordPress10 мин
  4. Шаг 4Права на файлы10 мин
  5. Шаг 5Сервер15 мин
Содержание
  1. Откуда приходят взломы
  2. Шаг 1. Обновления
  3. Шаг 2. Учётные записи и вход
  4. Шаг 3. Настройки WordPress
  5. Шаг 4. Права на файлы
  6. Шаг 5. Сервер
  7. Признаки взлома
  8. Чеклист на час
  9. Вопросы и ответы
  10. Итог

Откуда приходят взломы

Данные отчёта Patchstack о безопасности WordPress за 2025 год:

11 334новые уязвимости в экосистеме WordPress за год
+42%к числу уязвимостей годом ранее
~5 чмедианное время от публикации массово атакуемой уязвимости до первых попыток эксплуатации

Распределение по экосистеме показательно:

Где найдены уязвимостиДоля
Плагины91%
Темы9%
Ядро WordPress6 уязвимостей за год, все низкого приоритета

Время до атаки ещё важнее, чем число уязвимостей. Боты сканируют сайты автоматически и не выбирают цели: им неважно, известный это магазин или блог на двадцать посетителей.

Главный вывод

Безопасность WordPress держится в первую очередь на дисциплине обновлений и минимуме лишних плагинов.

Хорошая новость в том, что базовая защита закрывает большинство реальных атак и занимает около часа.

Пять путей атаки на WordPress и шаг защиты, который закрывает каждый из них Откуда приходит атака Шаг защиты · около часа Уязвимый плагин или тема устаревший или лишний Шаг 1. Обновления автообновления, удаление лишнего Подбор или кража пароля логин admin, слабый пароль Шаг 2. Учётные записи двухфакторный вход, лимит попыток Правка кода из админки и подбор паролей через XML-RPC Шаг 3. Настройки WordPress запрет редактора, без XML-RPC PHP-файл под видом картинки загрузка через уязвимую форму Шаг 4. Права на файлы 755 и 644, без PHP в uploads Атаки на сам сервер подбор пароля SSH, прямые атаки Шаг 5. Сервер файрвол, SSH по ключу, fail2ban
Каждый путь атаки закрывает свой шаг из этой статьи.

1Обновления10 мин

  • Включите автообновления ядра для второстепенных и защитных версий. В современных версиях WordPress они включены по умолчанию: проверьте, что их не отключил плагин или хостинг.
  • Включите автообновления плагинов и тем в разделе плагинов. Для небольших сайтов риск сломать что-то обновлением ниже, чем риск пропустить исправление уязвимости.
  • Удалите неиспользуемые плагины и темы. Отключённый плагин по-прежнему лежит на сервере, и его уязвимый файл может быть доступен напрямую. Оставьте одну резервную тему по умолчанию.
Только официальные источники

Не ставьте плагины и темы из неофициальных источников. «Бесплатные» версии платных плагинов входят в число самых частых способов получить вредоносный код на сайт.

Сначала резервная копия

Перед массовым обновлением на важном сайте сделайте резервную копию. Как настроить копии, которые запускаются автоматически, мы разобрали в статье про резервные копии.

2Учётные записи и вход15 мин

Уникальный логин администратора

Не admin и не название сайта: это первое, что подставляют боты.

Длинные уникальные пароли

Из менеджера паролей, для всех администраторов и редакторов.

Двухфакторная аутентификация

Руководство WordPress рекомендует двухэтапную проверку: пароль плюс код из приложения на телефоне. Ставится плагином за пять минут и закрывает атаки с украденным паролем.

Минимальные права

Автору статей не нужна роль администратора. Проверьте список пользователей и понизьте лишние права.

Ограничение попыток входа

Плагин ограничения попыток или правило на уровне сервера блокирует подбор паролей.

3Настройки WordPress10 мин

Откройте wp-config.php и добавьте две строки выше комментария «Это всё, дальше не редактируем»:

define( 'DISALLOW_FILE_EDIT', true );
define( 'WP_DEBUG', false );

DISALLOW_FILE_EDIT

Отключает встроенный редактор файлов тем и плагинов в админке. Даже получив доступ к учётной записи администратора, злоумышленник не сможет через браузер вписать вредоносный код в файлы сайта.

WP_DEBUG false

Гарантирует, что на рабочем сайте не выводятся сообщения об ошибках, которые раскрывают пути и детали кода.

Проверка

После сохранения wp-config.php встроенного редактора файлов тем и плагинов в админке больше нет.

Отключите XML-RPC

Если не публикуете записи из мобильного приложения, XML-RPC не нужен. Через него подбирают пароли пачками, по многу попыток за один запрос.

4Права на файлы10 мин

Руководство WordPress рекомендует выдавать права на запись как можно уже и расширять их только там, где это нужно. Типовая схема для своего сервера (вместо example.com подставьте каталог вашего сайта):

cd /var/www/example.com
chown -R www-data:www-data .
find . -type d -exec chmod 755 {} \;
find . -type f -exec chmod 644 {} \;
chmod 640 wp-config.php

Каталоги получают 755, файлы 644, а wp-config.php с паролем базы данных закрывается от чтения другими пользователями сервера.

Никогда не ставьте 777

С такими правами файл может переписать любой процесс на сервере.

Отдельно запретите выполнение PHP в каталоге загрузок, где должны лежать только картинки и документы. Для Nginx:

location ~* /wp-content/uploads/.*\.php$ {
    deny all;
}

Это правило обезвреживает один из самых частых сценариев взлома: загрузку PHP-файла под видом картинки через уязвимую форму.

PHP-файл под видом картинки проходит через уязвимую форму в uploads: без правила код выполняется, с правилом deny all запрос отклонён Сервер с Nginx PHP-файл под видом картинки Уязвимая форма пропускает файл uploads только картинки и документы Без правила PHP-код выполняется С правилом deny all: запрос отклонён
Уязвимая форма пропускает PHP-файл под видом картинки в каталог загрузок. Правило deny all для PHP в uploads не даёт такому файлу выполниться.

5Сервер15 мин

WordPress настолько безопасен, насколько безопасен сервер под ним.

МераЧто даёт
Файрволоткрыты только SSH, 80 и 443
Вход по SSH по ключувход по паролю отключён
fail2banблокирует IP после серии неудачных попыток входа по SSH
unattended-upgradesавтоматические обновления безопасности системы
Отдельный пользователь базы данных на каждый сайтесли взломают один сайт, остальные базы на сервере останутся недоступны
Скрытый IP сервера за прокси Cloudflareсокращает прямые атаки на сервер

Как подключить домен к Cloudflare, мы разобрали в инструкции по Cloudflare. А как подготовить сервер с файрволом, отдельной базой и сертификатом с нуля, описано в статье как развернуть WordPress на своём сервере.

Признаки того, что сайт уже взломан

Чужие страницы в поиске

По запросу site:example.com находятся страницы на чужие темы или на другом языке.

Редирект только с мобильных

Посетители с мобильных попадают на сторонние сайты, а вы с компьютера нет.

Неизвестные администраторы

Они появились в списке пользователей.

Незнакомые PHP-файлы

Они лежат в каталоге uploads или в корне сайта.

Скачок нагрузки

Резко выросла нагрузка на сервер или исходящий трафик.

Предупреждение

Его прислали хостинг-провайдер или Search Console.

Если что-то из этого совпало
  • Восстановите сайт из копии, сделанной до взлома.
  • Смените все пароли и ключи в wp-config.php.
  • Обновите всё.
  • Закройте уязвимость, через которую произошёл взлом.

Чеклист на час

Отмечайте пункты, отметки сохранятся в этом браузере.

Kesyio

Что из чеклиста Kesyio делает сам

При развёртывании сайта на WordPress Kesyio:

  • создаёт для него отдельную базу данных с отдельным пользователем;
  • выставляет владельца файлов www-data и права 755 для каталогов и 644 для файлов;
  • при подготовке сервера открывает в файрволе порты 80 и 443.

Остальные шаги остаются на вашей стороне: двухфакторная аутентификация, обновления, запрет PHP в каталоге загрузок и настройка SSH. Сервер ваш, и доступ к нему контролируете вы.

Вопросы и ответы

Нужен ли плагин безопасности?

Не обязателен. Большую часть защиты дают обновления, двухфакторная аутентификация, права на файлы и настройки сервера из этой статьи. Плагин безопасности полезен как дополнительный слой: сканирование файлов, журнал входов, уведомления. Но он не заменяет обновления.

Помогает ли смена адреса входа в админку?

Сокращает шум от ботов в журналах, но не защищает от целенаправленной атаки. Двухфакторная аутентификация и ограничение попыток входа дают гораздо больше.

Как часто нужно обновлять плагины?

Как можно быстрее после выхода исправлений безопасности: массовые атаки на свежие уязвимости начинаются в течение часов. Поэтому для большинства сайтов автообновления надёжнее ручных.

Безопаснее ли статичный сайт?

Да, у статичного сайта нет PHP, базы данных и плагинов, а значит, нет и большей части поверхности атаки. Если сайту не нужны функции CMS, это весомый аргумент в пользу статики. Сравнение: HTML или WordPress.

Итог

  • Большинство взломов WordPress проходит через устаревшие плагины, слабые пароли и слишком широкие права.
  • Час на обновления, двухфакторную аутентификацию, настройку прав и сервера закрывает основную часть рисков.
  • Сделайте это сразу после запуска сайта и добавьте регулярные резервные копии, чтобы любую ошибку можно было откатить.