Сайт WordPress заражён вирусом: признаки и что делать

WordPress услуги
Нужна помощь с сайтом?
Исправим, настроим или улучшим сайт. Оставьте заявку — подскажем решение.
Оставить заявку
Автор:vkuzyomko

Сайт WordPress заражён вирусом: признаки и что делать

Краткий ответ: если сайт WordPress заражён вирусом, сначала сделайте backup файлов и базы, зафиксируйте симптомы, проверьте .htaccess, wp-config.php, wp_options, пользователей-администраторов, тему, плагины, uploads, mu-plugins, cron, debug.log и server logs. После этого нужно удалить вредоносный код, закрыть уязвимость, сменить пароли, обновить WordPress, тему и плагины, проверить Search Console, формы, WooCommerce и создать чистый backup.

Главная ошибка — сразу ставить security-плагин и нажимать “очистить всё”. Плагин может найти часть заражения, но если backdoor остался в uploads, mu-plugins, wp_options, cron или заражённом плагине, вирус вернётся.

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

Причина

WordPress заражается не “сам по себе”. Обычно причина в уязвимом плагине, старой теме, слабом пароле, nulled-шаблоне, небезопасной загрузке файлов, открытом FTP-доступе, неправильных правах файлов, взломанном хостинге или старой версии PHP.

После заражения злоумышленник редко ограничивается одним файлом. Часто добавляется несколько точек закрепления: вредоносный код в теме, неизвестный PHP-файл в uploads, новая запись в wp_options, скрытый администратор, cron-задача или mu-plugin, который восстанавливает вирус после частичной очистки.

Типовые причины заражения WordPress:

  • устаревшие плагины и темы;
  • скачанные “бесплатные” premium-темы и nulled-плагины;
  • слабые пароли администратора, FTP/SFTP, хостинга или базы данных;
  • отсутствие двухфакторной авторизации для администраторов;
  • небезопасная форма загрузки файлов;
  • права файлов и папок выставлены слишком широко;
  • старые резервные копии и тестовые копии сайта лежат в публичной папке;
  • в uploads разрешено выполнение PHP;
  • сайт давно не обновлялся;
  • на хостинге заражены соседние сайты в том же аккаунте;
  • после прошлой очистки не были сменены пароли и соли WordPress.

Признаки, что WordPress заражён вирусом

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

Признак Что может означать Где проверять
Редирект на чужой сайт redirect malware, заражённый .htaccess, тема, база или плагин .htaccess, wp_options, theme files, plugins, JS
Чужие страницы в Google SEO-спам, дорвеи, скрытые записи, вредоносные URL Search Console, sitemap, wp_posts, server logs
Неизвестный администратор получен доступ к сайту Пользователи, wp_users, wp_usermeta
PHP-файлы в uploads backdoor или вредоносный загрузчик /wp-content/uploads/
Файл .htaccess сам меняется вирус восстанавливает правила редиректа .htaccess, cron, mu-plugins, plugins
Сайт резко стал медленным скрытые запросы, спам-боты, вредоносный cron, тяжёлый код server logs, cron, wp_options, debug.log
Письма уходят в спам сайт рассылал спам или домен потерял репутацию SMTP-логи, почтовые DNS, формы, users
Антивирус хостинга показывает заражение в файлах найден вредоносный код отчёт антивируса, пути к файлам, даты изменения
wp-admin не открывается вирус, security-блокировка, критическая ошибка, редирект debug.log, error_log, FTP/SFTP, .htaccess
В базе появились чужие script/iframe инъекция в записи, виджеты, настройки темы или плагинов wp_posts, wp_options, custom fields

Диагностика

Диагностику нужно делать до очистки. Если удалить файлы наугад, можно сломать сайт и потерять следы заражения.

  1. Сделайте backup заражённого сайта. Сохраните файлы и базу. Даже заражённая копия нужна для анализа и отката отдельных данных.
  2. Зафиксируйте симптомы. Скриншоты, URL, куда идёт редирект, когда появился вирус, какие страницы затронуты.
  3. Проверьте сайт как обычный посетитель. Инкогнито, телефон, другой браузер, другой IP, переход из Google.
  4. Проверьте .htaccess. Ищите чужие RewriteRule, Redirect, проверку referrer, user-agent, mobile, IP.
  5. Проверьте wp-config.php. Ищите неизвестные include, require, eval, base64_decode, gzinflate, внешние URL.
  6. Проверьте wp_options. Siteurl, home, active_plugins, template, stylesheet, autoload-опции, чужие домены.
  7. Проверьте тему. Header.php, footer.php, functions.php, index.php, page.php, single.php, дочерняя тема.
  8. Проверьте плагины. Особенно старые, отключённые, неизвестные, nulled или недавно установленные.
  9. Проверьте uploads. В uploads не должно быть исполняемых PHP-файлов.
  10. Проверьте пользователей. Удалите неизвестных администраторов, но сначала сохраните данные для анализа.
  11. Проверьте cron и mu-plugins. Там часто прячется код, который восстанавливает заражение.
  12. Проверьте логи хостинга. По ним можно увидеть, какой файл вызывался, когда началась активность и с каких IP были запросы.

Нужно быстро решить проблему на сайте?

Если не хотите рисковать сайтом и тратить время на эксперименты, можно оставить заявку. Я посмотрю задачу и предложу аккуратное решение.

Оставить заявку

Решение

Очистка WordPress от вируса должна закрывать всю цепочку: удалить вредоносный код, убрать backdoor, закрыть уязвимость, сменить доступы, проверить SEO-последствия и настроить профилактику.

  1. Сохраните копию заражённого сайта. Не работайте без backup.
  2. Ограничьте доступ. Если сайт активно заражает посетителей или редиректит, временно закройте публичный доступ или включите технический режим на уровне хостинга.
  3. Очистите ядро WordPress. Сравните файлы с официальной версией или аккуратно замените ядро, не трогая wp-content и wp-config.php.
  4. Очистите .htaccess. Уберите неизвестные правила, но сохраните нужные правила WordPress, HTTPS, кеша и мультиязычности.
  5. Очистите тему. Удалите вредоносные вставки из шаблонов, functions.php и дочерней темы.
  6. Очистите плагины. Удалите неиспользуемые, замените подозрительные чистыми версиями, обновите устаревшие.
  7. Проверьте базу данных. Удалите чужие script, iframe, неизвестные домены, подозрительные autoload-опции.
  8. Удалите backdoor-файлы. Проверьте uploads, mu-plugins, cache, wp-content и нестандартные папки.
  9. Смените пароли. WordPress, хостинг, FTP/SFTP, база данных, email администратора, API-кабинеты.
  10. Обновите соли WordPress. Это разлогинит старые сессии.
  11. Обновите WordPress, тему и плагины. Делайте это после backup и проверки совместимости.
  12. Проверьте сайт после очистки. Главная, внутренние страницы, wp-admin, формы, WooCommerce, мобильная версия, Search Console.
  13. Создайте чистый backup. После успешной очистки сохраните новую рабочую копию сайта.

Код

Важно: код ниже нужен для диагностики. Перед изменением wp-config.php, .htaccess или базы данных сделайте backup. Не показывайте ошибки посетителям и не удаляйте найденный код без понимания, за что он отвечает.

Куда вставлять: в файл wp-config.php, выше строки /* That’s all, stop editing! */. Код включает запись ошибок в debug.log, но не выводит ошибки посетителям.

define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors', 0);

После этого проверьте файл:

/wp-content/debug.log

Стандартный .htaccess для WordPress в корне сайта выглядит так. Куда проверять: файл .htaccess в корневой папке сайта. Перед заменой скачайте текущий файл.

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

Важно: если сайт установлен в подкаталоге, использует мультиязычность, кеш, security-плагин или кастомные редиректы, .htaccess может отличаться. Не заменяйте его вслепую.

Если есть доступ к WP-CLI, можно проверить адрес сайта, плагины, пользователей и cron-задачи. Команды выполняются в терминале на сервере из корня сайта:

wp option get siteurl
wp option get home
wp plugin list
wp user list --role=administrator
wp cron event list

Быстрый поиск подозрительных функций в wp-content:

grep -R "base64_decode" wp-content/ -n
grep -R "eval(" wp-content/ -n
grep -R "gzinflate" wp-content/ -n
grep -R "shell_exec" wp-content/ -n
grep -R "wp_redirect" wp-content/ -n
grep -R "Location:" wp-content/ -n
grep -R "document.location" wp-content/ -n
grep -R "window.location" wp-content/ -n

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

После диагностики отключите debug-режим на рабочем сайте:

define('WP_DEBUG', false);
define('WP_DEBUG_LOG', false);
define('WP_DEBUG_DISPLAY', false);

Где чаще всего прячется вирус WordPress

.htaccess

Ищите неизвестные редиректы, RewriteRule на чужие домены, условия по referrer, user-agent, mobile, IP. Если .htaccess меняется снова после очистки, значит остался backdoor.

wp-config.php

В этом файле не должно быть чужих include, require, eval, base64_decode, gzinflate, скрытых ссылок и странных переменных. Особенно внимательно проверяйте код выше настроек базы и ниже стандартных блоков WordPress.

Тема и дочерняя тема

Часто заражаются header.php, footer.php, functions.php, index.php, page.php, single.php. Вредоносный код может быть замаскирован под аналитику, рекламный скрипт или минифицированный JS.

Плагины

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

uploads

В uploads обычно лежат изображения, PDF, документы и медиафайлы. PHP-файлы в uploads — сильный признак backdoor или заражённой загрузки файлов.

mu-plugins

Must-use plugins загружаются автоматически. Даже если вы отключите обычные плагины, код из mu-plugins продолжит работать.

wp_options

Вредоносный код может храниться в настройках темы, виджетах, transient-значениях, autoload-опциях или настройках плагинов.

wp_posts

Если заражение добавило script, iframe или скрытые ссылки в контент, проверяйте записи, страницы, товары, блоки page builder и кастомные поля.

Как отличить вирус от обычной ошибки

Не каждый сбой — это вирус. Иногда редирект или ошибка возникает из-за неправильной настройки сайта, SSL, кеша, плагина редиректов или переноса домена.

Симптом Похоже на обычную ошибку Похоже на вирус
Редирект на старый домен после переноса да не всегда
Редирект на казино, фишинг, рекламу, фарму нет да
Редирект только с мобильного редко часто
Редирект только из Google редко часто
Неизвестный администратор нет да
PHP-файлы в uploads нет да
debug.log показывает fatal error после правки кода да не всегда
.htaccess сам восстанавливает чужие правила редко часто
В Google появились сотни чужих URL редко часто

Результат

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

  • редиректы на чужие сайты исчезли;
  • wp-admin открывается;
  • неизвестные администраторы удалены;
  • .htaccess очищен от чужих правил;
  • wp-config.php не содержит подозрительного кода;
  • в uploads нет PHP-файлов;
  • mu-plugins проверены;
  • cron-задачи проверены;
  • wp_options и wp_posts очищены от вредоносных вставок;
  • WordPress, тема и плагины обновлены безопасно;
  • пароли и соли WordPress обновлены;
  • формы заявок работают;
  • если есть WooCommerce — корзина, checkout, оплата, доставка и письма проверены;
  • Search Console не показывает новые заражённые URL;
  • создан свежий backup чистого сайта.

Дополнительные способы

Проверка через Search Console

Проверьте разделы безопасности, индексирования, 404 и список URL. Если Google видел заражённые страницы, после очистки отправьте сайт на повторную проверку.

Проверка с другого IP и телефона

Некоторые вирусы скрываются от администратора. Проверяйте сайт в инкогнито, с мобильного интернета, из другого браузера и без авторизации.

Сравнение файлов с чистой копией

Ядро WordPress лучше сравнивать с официальной версией. Плагины и темы — с чистыми архивами из доверенного источника.

Проверка дат изменения файлов

Отсортируйте файлы по дате изменения. Если много PHP-файлов изменились в один день без ваших действий, это важный след заражения.

Проверка соседних сайтов на хостинге

Если в одном аккаунте хостинга лежит несколько сайтов, заражение может вернуться с соседнего проекта. Проверять нужно весь аккаунт, а не только одну папку.

Проверка после обновлений

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

Частые ошибки

  • Удалять только найденный файл. Часто вирус имеет несколько точек закрепления.
  • Не делать backup перед очисткой. Можно потерять важные данные, товары, формы, настройки темы или заказы.
  • Считать security-плагин полной очисткой. Плагин помогает, но не всегда видит backdoor в базе, cron, uploads или mu-plugins.
  • Проверять сайт только под администратором. Вирус может скрываться от залогиненных пользователей.
  • Не менять пароли. Старые доступы могут снова привести к заражению.
  • Оставлять nulled-плагины и темы. Это частая причина повторного заражения.
  • Не проверять wp_options. Вредоносный код может жить в базе, а не только в файлах.
  • Не проверять uploads. Backdoor часто прячут в папках с изображениями.
  • Не проверять Search Console. Google может продолжать видеть заражённые URL.
  • Создавать backup только до очистки. После успешной очистки нужен новый чистый backup.

Диагностика проблем

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

Проблема после очистки Вероятная причина Что делать
Редирект вернулся через несколько часов backdoor, cron, mu-plugin, заражённый плагин проверить wp-cron, mu-plugins, uploads, неизвестные PHP-файлы
.htaccess снова изменился код имеет право записи и восстанавливает правила найти файл или процесс, который пишет в .htaccess
В Google остаются чужие страницы не все URL очищены или Google ещё не переобошёл сайт проверить Search Console, sitemap, wp_posts, server logs
Админка снова не открывается вирус, security-блокировка, PHP fatal error проверить debug.log, error_log, plugins, theme, .htaccess
Антивирус хостинга снова находит файлы очистка была частичной сравнить файлы, проверить соседние сайты, сменить пароли
Появляется новый администратор остался доступ или backdoor проверить пользователей, логи входов, FTP, базу, mu-plugins
Формы начали отправлять спам форма не защищена или сайт используется для рассылки проверить SMTP, wp_mail, формы, reCAPTCHA, логи
Сайт стал медленным после очистки остался вредоносный cron, тяжёлые запросы или повреждён кеш проверить cron, базу, cache, server logs, admin-ajax.php

Как защититься от повторного заражения

После удаления вируса нужно закрыть причину. Иначе сайт может снова заразиться через тот же плагин, пароль, FTP-доступ или соседний сайт на хостинге.

  • обновите WordPress, тему и плагины после backup;
  • удалите неиспользуемые темы и плагины;
  • не используйте nulled-плагины и темы;
  • смените пароли WordPress, хостинга, FTP/SFTP, базы данных и email;
  • обновите соли WordPress в wp-config.php;
  • включите 2FA для администраторов;
  • проверьте права файлов и папок;
  • запретите выполнение PHP в uploads, если это возможно на вашем сервере;
  • настройте регулярные backup вне основного хостинга;
  • проверяйте пользователей-администраторов;
  • следите за изменениями файлов;
  • проверяйте сайт каждый месяц по техническому чек-листу;
  • не храните старые архивы сайта в публичной папке;
  • проверяйте Search Console после очистки.

FAQ

Как понять, что сайт WordPress заражён вирусом?

Признаки: редиректы на чужие сайты, чужие страницы в Google, неизвестные администраторы, PHP-файлы в uploads, странные script/iframe в базе, предупреждения браузера, спам-рассылки, резкое падение скорости, изменения в .htaccess или wp-config.php.

Что делать в первую очередь?

Сделайте backup файлов и базы, зафиксируйте симптомы, проверьте сайт в инкогнито, затем проверьте .htaccess, wp-config.php, wp_options, тему, плагины, uploads, пользователей, cron и логи.

Можно ли удалить вирус WordPress плагином?

Плагин может помочь найти часть заражения, но не стоит полагаться только на него. Вирус может быть в базе, cron, mu-plugins, uploads, .htaccess, wp-config.php или заражённом плагине.

Почему вирус возвращается после очистки?

Обычно остался backdoor, неизвестный администратор, заражённый плагин, cron-задача, mu-plugin, слабый пароль или доступ через FTP/хостинг.

Нужно ли делать backup, если сайт заражён?

Да. Заражённый backup нужен для анализа и отката отдельных данных. Но после очистки нужно создать новый чистый backup.

Где чаще всего прячется вирус в WordPress?

В .htaccess, wp-config.php, functions.php, header.php, footer.php, plugins, uploads, mu-plugins, wp_options, wp_posts, cron-задачах и неизвестных файлах внутри wp-content.

Что делать, если сайт редиректит только с телефона?

Проверьте JS-вставки, header/footer темы, плагины рекламы, кеш, wp_options и вредоносный код, который определяет user-agent мобильного устройства.

Что делать, если в Google появились чужие страницы?

Проверьте Search Console, sitemap, wp_posts, server logs, скрытые записи, вредоносные URL и шаблоны. После очистки отправьте сайт на повторную проверку.

Нужно ли менять пароли после очистки?

Да. Меняйте пароли WordPress, хостинга, FTP/SFTP, базы данных, email администратора и API-доступов. Также обновите соли WordPress, чтобы сбросить старые сессии.

Можно ли просто восстановить сайт из backup?

Можно, если backup точно чистый и сделан до заражения. Но после восстановления всё равно нужно закрыть уязвимость, иначе сайт заразится снова.

Вывод

Если сайт WordPress заражён вирусом, важно не паниковать и не удалять файлы наугад. Безопасный порядок такой: backup, диагностика симптомов, проверка файлов, базы, пользователей, cron и логов, очистка вредоносного кода, закрытие уязвимости, смена паролей, обновление сайта и повторная проверка.

Надёжная очистка — это не только удалить найденный вирус. Нужно убрать backdoor, проверить Search Console, восстановить заявки и WooCommerce-сценарии, создать чистый backup и настроить профилактику, чтобы заражение не вернулось.

Об авторе

vkuzyomko administrator