Уязвимости WordPress и PHP: как защитить сайт
Две одинаковые трубы с вентилем, маленькая целая, а из стыка большой падает зелёный шарик

Уязвимости WordPress и PHP: как защитить сайт

Уязвимости WordPress чаще всего возникают в плагинах и устаревшем PHP. Разбираем типы атак, признаки взлома и пошаговую защиту сайта.

Уязвимости WordPress и PHP: откуда берутся дыры и как их закрыть

Сайты на WordPress взламывают в основном не через само ядро, а через уязвимые плагины, темы и устаревшую версию PHP. Защита строится на четырёх вещах: своевременные обновления, минимум плагинов, правильная настройка PHP и сервера, резервные копии.

Более 90% найденных уязвимостей WordPress приходится на плагины и темы, а не на ядро платформы.

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

Почему WordPress и PHP оказываются под ударом

WordPress используют более 40% всех сайтов в мире, поэтому каждая найденная брешь сразу даёт злоумышленнику огромное число целей. Когда в популярном плагине публикуют информацию об уязвимости, автоматические сканеры начинают атаки в течение часов. Так в 2020 году дыра в плагине File Manager с более чем 700 тысячами установок позволяла выполнять произвольный код на сервере, и тысячи сайтов были атакованы раньше, чем владельцы заметили обновление.

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

Третий фактор человеческий. Открытая экосистема с десятками тысяч плагинов привлекает как профессиональных разработчиков, так и авторов, которые не следят за безопасностью. Добавьте сюда пиратские («nulled») темы и плагины с готовыми бэкдорами, слабые пароли и хостинг, где годами стоит PHP 7.x, и получится классический набор причин взлома.

Где на самом деле находятся уязвимости

01 / доля рынка
40%+

сайтов в мире работают на WordPress, поэтому он в центре внимания ботов

02 / плагины и темы
90%+

найденных уязвимостей приходится на сторонние расширения

03 / ядро
<1%

уязвимостей относится к самому ядру WordPress, и оно обновляется быстро

04 / версия php
3 года

поддержки у каждой ветки PHP: два года активной и год только security-исправлений

Ориентир по отчётам Patchstack и Wordfence: основная поверхность атаки — то, что вы установили сами.

Основные типы уязвимостей

Названия уязвимостей в отчётах звучат пугающе, но суть большинства из них проста. Это ситуации, когда код плагина или темы доверяет данным, которые пришли от пользователя, и не проверяет их. Именно такие ошибки чаще всего получают идентификаторы CVE и попадают в базы вроде WPScan и Patchstack.

Ниже собраны самые распространённые типы, с которыми сталкиваются владельцы сайтов на WordPress. Для каждого указано, как он работает и какая защита реально помогает.

Тип уязвимостиКак работаетЧем грозитКак защититься
SQL-инъекцияЧерез поле формы или параметр URL в запрос к базе данных подмешивается чужая командаКража данных, создание администратора, изменение контентаОбновления, WAF, отказ от сомнительных плагинов
XSS (межсайтовый скриптинг)В страницу или комментарий внедряется JavaScript, который выполняется в браузере посетителя или администратораКража сессий, подмена контента, фишингОбновления, экранирование вывода, ограничение прав редакторов
RCE (удалённое выполнение кода)Ошибка позволяет запустить произвольный PHP-код на сервереПолный захват сайта и сервераОбновления, запрет выполнения опасных функций PHP, WAF
LFI/RFI (включение файлов)Скрипт подключает файл по пути, который контролирует атакующийЧтение wp-config.php, выполнение вредоносного кодаallow_url_include = Off, актуальный PHP, ограничение open_basedir
Небезопасная загрузка файловПлагин не проверяет тип файла, и на сервер попадает PHP-шелл вместо картинкиБэкдор с постоянным доступомЗапрет выполнения PHP в папке uploads, проверка типов файлов
CSRF (подделка запроса)Администратора заставляют перейти по ссылке, и от его имени выполняется действиеСмена настроек, создание пользователейОбновления, nonce-проверки в коде, выход из админки после работы

Версия PHP: почему «работает, не трогай» не подходит

Каждая ветка PHP живёт ограниченное время. После окончания поддержки разработчики перестают выпускать исправления безопасности, и любая найденная в ней уязвимость остаётся открытой навсегда. Ветка 7.4 лишилась поддержки в ноябре 2022 года, ветка 8.0 в ноябре 2023 года, но на многих хостингах и VPS они до сих пор стоят по умолчанию.

Проверить версию можно в разделе «Состояние сайта» в админке WordPress (Инструменты → Здоровье сайта) или в панели хостинга. Актуальные сроки поддержки уточняйте на официальном сайте PHP: сейчас безопасный выбор — ветки 8.2, 8.3 и новее. Переходить стоит последовательно: сначала сделать резервную копию, затем проверить сайт на тестовой копии, включить вывод ошибок только в тестовой среде и убедиться, что плагины и тема не используют устаревшие функции.

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

Как защитить WordPress: пошаговый план

  1. 01

    Сделайте полную резервную копию файлов и базы данных и храните её вне сервера. Правило 3-2-1: три копии, два типа носителей, одна в удалённом месте.

  2. 02

    Обновите ядро WordPress, темы и плагины до последних версий. Включите автообновление для плагинов, которые получают регулярные исправления безопасности.

  3. 03

    Удалите всё лишнее: неактивные плагины и темы, демо-контент, неиспользуемых пользователей. Каждое расширение — это дополнительный код, который нужно поддерживать.

  4. 04

    Переведите PHP на поддерживаемую версию (8.2, 8.3 или новее) и проверьте сайт на тестовой копии до переключения на боевом.

  5. 05

    Настройте права доступа: папки 755, файлы 644, wp-config.php 600 или 640. Запретите выполнение PHP-файлов в папке wp-content/uploads.

  6. 06

    Защитите вход в админку: уникальные длинные пароли, двухфакторная аутентификация, ограничение попыток входа, отказ от логина admin.

  7. 07

    Установите WAF и сканер: Wordfence, Solid Security или облачный фильтр на уровне хостинга либо CDN. Он блокирует типовые атаки до выполнения кода.

  8. 08

    Настройте мониторинг: подключите сайт в Яндекс Вебмастере и Google Search Console, включите уведомления о проблемах безопасности и следите за аномалиями в Яндекс Метрике или Google Analytics.

Откуда берутся «дыры» на практике

Чаще всего причина не в хитрой атаке, а в организационных мелочах. Плагин не обновлялся полгода, потому что «после прошлого обновления что-то сломалось». Доступ к админке остался у бывшего подрядчика. Пароль от FTP лежит в переписке в мессенджере. Тестовая копия сайта с отладкой лежит на соседнем поддомене и доступна всем.

Поэтому безопасность WordPress — это процесс, а не разовая настройка. Заведите регулярность: раз в неделю проверять обновления, раз в месяц просматривать список пользователей и плагинов, раз в квартал проверять резервную копию на восстановление. Резервная копия, которую никогда не разворачивали, не гарантирует, что она рабочая.

Типичные ошибки, из-за которых сайты взламывают

Большинство инцидентов связано не со сложными атаками, а с несколькими повторяющимися ошибками владельцев и разработчиков.

Как делать не надо

  • Устанавливать «бесплатные» взломанные темы и плагины с торрентов (nulled), в которых уже есть бэкдор
  • Оставлять PHP 7.x и старые плагины, потому что всё и так работает
  • Редактировать файлы темы прямо в админке и хранить права 777 на папках
  • Использовать один пароль для хостинга, FTP, базы данных и почты
  • Хранить резервные копии на том же сервере, где работает сайт

Как правильно

  1. 01

    Покупать расширения у разработчиков или брать из официального каталога WordPress и проверять дату последнего обновления

  2. 02

    Планировать обновления: тестовая копия, резервная копия, затем боевой сайт

  3. 03

    Отключить редактор файлов, выставить права 755/644 и работать через Git или SFTP

  4. 04

    Использовать менеджер паролей и разные длинные пароли для каждого сервиса

  5. 05

    Хранить копии во внешнем облаке или на другом сервере и регулярно проверять восстановление

Настройки, которые закрывают базовые векторы атак

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

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

Базовый hardening: wp-config.php и php.ini

wp-config.php
define('DISALLOW_FILE_EDIT', true);
define('FORCE_SSL_ADMIN', true);
define('WP_DEBUG', false);
define('WP_AUTO_UPDATE_CORE', 'minor');

Отключает редактор файлов в админке, включает HTTPS для входа, скрывает ошибки и оставляет автообновление критических релизов.

php.ini
expose_php = Off
display_errors = Off
allow_url_include = Off
disable_functions = exec,passthru,
  shell_exec,system,proc_open,popen

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

После изменений проверьте сайт и логи ошибок: часть плагинов может использовать ограниченные функции.

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

Взлом не всегда заметен сразу. Иногда сайт выглядит нормально для администратора, но показывает спам или редиректы посетителям из поиска. Обратите внимание на следующие сигналы:

- в списке пользователей появились незнакомые администраторы; - в папках wp-content/uploads, wp-includes или в корне найдены странные PHP-файлы со случайными названиями; - при переходе из Яндекса или Google сайт перенаправляет на сторонние ресурсы, а при прямом заходе всё в порядке; - в выдаче появились страницы с чужим контентом, казино, фармацевтикой; - хостинг сообщает о подозрительной нагрузке или рассылке писем; - резко упал трафик, а в Яндекс Вебмастере или Google Search Console появились уведомления о проблемах безопасности.

Для быстрой проверки используйте сканеры (Wordfence, Sucuri SiteCheck) и консольные команды WP-CLI: `wp core verify-checksums` сравнивает файлы ядра с оригинальными, а `wp plugin verify-checksums --all` делает то же для плагинов из официального каталога.

Что делать, если взлом уже произошёл

Главное правило: не пытаться сразу «удалить вирус» вслепую. Если не найти и не закрыть точку входа, заражение вернётся через несколько часов. Сначала нужно остановить ущерб, затем собрать данные для анализа, и только потом чистить сайт.

Порядок действий приведён ниже. Он подходит для большинства небольших и средних сайтов на WordPress, но при взломе интернет-магазина или сайта с персональными данными стоит сразу привлекать специалиста по безопасности.

Таймлайн реагирования на взлом

0–15 мин
Изолировать

Включите режим обслуживания или закройте доступ, смените пароли хостинга, FTP/SFTP, базы данных и всех администраторов.

15–60 мин
Сохранить следы

Сделайте копию текущих файлов и логов сервера для анализа, затем найдите, какой плагин или файл стал точкой входа.

1–3 часа
Очистить

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

3–6 часов
Закрыть дыру

Обновите PHP и все расширения, замените ключи безопасности в wp-config.php, настройте WAF и права на файлы.

1–3 дня
Восстановить репутацию

Проверьте сайт в Яндекс Вебмастере и Google Search Console, закройте уведомления и запросите повторную проверку.

Если сайт взломан, поисковики могут пометить его как опасный и понизить в выдаче. Статус проверяется в Яндекс Вебмастере (раздел «Безопасность и нарушения») и в Google Search Console (раздел «Проблемы безопасности»). После очистки сайта запросите повторную проверку в обоих сервисах.

Безопасность как часть SEO и репутации

Взлом сайта бьёт не только по безопасности, но и по продвижению. Скрытые ссылки и спам-страницы портят индексацию, а предупреждение «Сайт может угрожать безопасности вашего компьютера» отпугивает пользователей и в Яндексе, и в Google. Восстановление позиций после взлома занимает недели, а иногда и месяцы.

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

Что даёт регулярная защита WordPress

  1. 01

    Закрытие известных уязвимостей до того, как их начнут массово использовать боты

  2. 02

    Стабильные позиции в Яндексе и Google без предупреждений о вредоносном коде

  3. 03

    Быстрое восстановление из резервной копии вместо многодневной «чистки»

  4. 04

    Меньше нагрузки на сервер, так как лишние плагины и спам-скрипты не расходуют ресурсы

  5. 05

    Безопасное хранение заявок и персональных данных клиентов

  6. 06

    Спокойствие владельца: понятный регламент обновлений и мониторинга

Итоги: как не стать лёгкой добычей

Безопасность WordPress — это не разовая настройка, а регулярные обновления, минимум расширений и проверенные резервные копии.
  1. 01

    Обновляйте ядро, плагины и темы, а PHP держите на поддерживаемой версии

  2. 02

    Удаляйте неиспользуемые расширения и никогда не ставьте nulled-версии

  3. 03

    Настройте права файлов, запретите выполнение PHP в uploads и ограничьте опасные функции

  4. 04

    Включите двухфакторную аутентификацию и WAF, храните резервные копии вне сервера

  5. 05

    Подключите Яндекс Вебмастер и Google Search Console, чтобы быстро узнавать о проблемах

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

Часто задаваемые вопросы

Проверим ваш WordPress на уязвимости до того, как это сделают хакеры

Найдём опасные плагины, устаревший PHP и дыры в настройках, составим план исправлений

Аудит безопасностиЧистка от вирусовОтчёт за 24 часа

Большинство взломов — через устаревшие плагины

Политика конфиденциальности

При оставлении заявки на ресурсе «https://gurucontext.ru» пользователи предоставляют следующие сведения:

  • Имя
  • Контактный телефон или Telegram
  • Адрес сайта пользователя (не обязательно)

Также администрация сайта получает данные об IP-адресе посетителей, типе браузера, времени нахождения на сайте и прочие подобные сведения через сервисы статистики.

Использование информации

Вся полученная информация используется администрацией «https://gurucontext.ru» исключительно в целях связи с клиентом.

Защита персональных данных

Компания «https://gurucontext.ru» обязуется не разглашать сведения, полученные от пользователей, и хранит их в защищённом виде.

Предоставление данных третьим лицам

Полученные сведения не передаются третьим лицам, за исключением случаев исполнения обязательств перед клиентом (с его разрешения) и обоснованных требований закона.

Контакты

Телефон: +7 (499) 955-47-00.
E-mail: info@gurucontext.ru.