Краткий ответ: если сайт 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:
Иногда заражение видно сразу: сайт перенаправляет на чужой домен или браузер показывает предупреждение. Но чаще признаки мягче: сайт стал медленнее, появились странные страницы в 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 |
Диагностику нужно делать до очистки. Если удалить файлы наугад, можно сломать сайт и потерять следы заражения.
Если не хотите рисковать сайтом и тратить время на эксперименты, можно оставить заявку. Я посмотрю задачу и предложу аккуратное решение.
Очистка WordPress от вируса должна закрывать всю цепочку: удалить вредоносный код, убрать backdoor, закрыть уязвимость, сменить доступы, проверить SEO-последствия и настроить профилактику.
Важно: код ниже нужен для диагностики. Перед изменением 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);
Ищите неизвестные редиректы, RewriteRule на чужие домены, условия по referrer, user-agent, mobile, IP. Если .htaccess меняется снова после очистки, значит остался backdoor.
В этом файле не должно быть чужих include, require, eval, base64_decode, gzinflate, скрытых ссылок и странных переменных. Особенно внимательно проверяйте код выше настроек базы и ниже стандартных блоков WordPress.
Часто заражаются header.php, footer.php, functions.php, index.php, page.php, single.php. Вредоносный код может быть замаскирован под аналитику, рекламный скрипт или минифицированный JS.
Проверьте плагины, которые давно не обновлялись, скачаны не из официальных источников, имеют странные папки или появились незадолго до заражения.
В uploads обычно лежат изображения, PDF, документы и медиафайлы. PHP-файлы в uploads — сильный признак backdoor или заражённой загрузки файлов.
Must-use plugins загружаются автоматически. Даже если вы отключите обычные плагины, код из mu-plugins продолжит работать.
Вредоносный код может храниться в настройках темы, виджетах, transient-значениях, autoload-опциях или настройках плагинов.
Если заражение добавило script, iframe или скрытые ссылки в контент, проверяйте записи, страницы, товары, блоки page builder и кастомные поля.
Не каждый сбой — это вирус. Иногда редирект или ошибка возникает из-за неправильной настройки сайта, SSL, кеша, плагина редиректов или переноса домена.
| Симптом | Похоже на обычную ошибку | Похоже на вирус |
|---|---|---|
| Редирект на старый домен после переноса | да | не всегда |
| Редирект на казино, фишинг, рекламу, фарму | нет | да |
| Редирект только с мобильного | редко | часто |
| Редирект только из Google | редко | часто |
| Неизвестный администратор | нет | да |
| PHP-файлы в uploads | нет | да |
| debug.log показывает fatal error после правки кода | да | не всегда |
| .htaccess сам восстанавливает чужие правила | редко | часто |
| В Google появились сотни чужих URL | редко | часто |
После правильной очистки результат должен быть технически проверяемым. Недостаточно просто открыть главную страницу и убедиться, что она загрузилась.
Проверьте разделы безопасности, индексирования, 404 и список URL. Если Google видел заражённые страницы, после очистки отправьте сайт на повторную проверку.
Некоторые вирусы скрываются от администратора. Проверяйте сайт в инкогнито, с мобильного интернета, из другого браузера и без авторизации.
Ядро WordPress лучше сравнивать с официальной версией. Плагины и темы — с чистыми архивами из доверенного источника.
Отсортируйте файлы по дате изменения. Если много PHP-файлов изменились в один день без ваших действий, это важный след заражения.
Если в одном аккаунте хостинга лежит несколько сайтов, заражение может вернуться с соседнего проекта. Проверять нужно весь аккаунт, а не только одну папку.
После очистки обновляйте сайт аккуратно. Безопасный порядок описан в статье обновление WordPress, темы и плагинов.
Если вирус возвращается или симптомы не исчезают, значит источник заражения найден не полностью.
| Проблема после очистки | Вероятная причина | Что делать |
|---|---|---|
| Редирект вернулся через несколько часов | 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-доступ или соседний сайт на хостинге.
Признаки: редиректы на чужие сайты, чужие страницы в Google, неизвестные администраторы, PHP-файлы в uploads, странные script/iframe в базе, предупреждения браузера, спам-рассылки, резкое падение скорости, изменения в .htaccess или wp-config.php.
Сделайте backup файлов и базы, зафиксируйте симптомы, проверьте сайт в инкогнито, затем проверьте .htaccess, wp-config.php, wp_options, тему, плагины, uploads, пользователей, cron и логи.
Плагин может помочь найти часть заражения, но не стоит полагаться только на него. Вирус может быть в базе, cron, mu-plugins, uploads, .htaccess, wp-config.php или заражённом плагине.
Обычно остался backdoor, неизвестный администратор, заражённый плагин, cron-задача, mu-plugin, слабый пароль или доступ через FTP/хостинг.
Да. Заражённый backup нужен для анализа и отката отдельных данных. Но после очистки нужно создать новый чистый backup.
В .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 мобильного устройства.
Проверьте Search Console, sitemap, wp_posts, server logs, скрытые записи, вредоносные URL и шаблоны. После очистки отправьте сайт на повторную проверку.
Да. Меняйте пароли WordPress, хостинга, FTP/SFTP, базы данных, email администратора и API-доступов. Также обновите соли WordPress, чтобы сбросить старые сессии.
Можно, если backup точно чистый и сделан до заражения. Но после восстановления всё равно нужно закрыть уязвимость, иначе сайт заразится снова.
Если сайт WordPress заражён вирусом, важно не паниковать и не удалять файлы наугад. Безопасный порядок такой: backup, диагностика симптомов, проверка файлов, базы, пользователей, cron и логов, очистка вредоносного кода, закрытие уязвимости, смена паролей, обновление сайта и повторная проверка.
Надёжная очистка — это не только удалить найденный вирус. Нужно убрать backdoor, проверить Search Console, восстановить заявки и WooCommerce-сценарии, создать чистый backup и настроить профилактику, чтобы заражение не вернулось.
Рекомендуем услугу: срочная помощь WordPress
Об авторе