Несколько лет назад ко мне обратился клиент - владелец небольшого интернет-магазина на WordPress. Жаловался: сайт стал вести себя странно, пользователей при переходе на страницы бросало на какие-то казино и букмекерские конторы, а Google заблокировал сайт с пометкой «опасный». Трафик упал вдвое за неделю. Когда я залез в файлы - там был классический вирус-редирект, вшитый в файл functions.php через дыру в устаревшем плагине. Вычистили за пару часов, и сайт заработал нормально.
Я занимаюсь WordPress с 2013 года и через мою студию прошли десятки заражённых сайтов. Удалить вредоносный код самостоятельно - реально, если действовать методично. В этой статье я расскажу, как обнаружить заражение, провести чистку файлов и базы данных, и закрыть дыры, чтобы вирус не вернулся. Важно понимать: вредоносный код бывает нескольких видов - редиректы, скрытые ссылки, майнеры, скрытый удалённый доступ. В статье разберём, как находить и устранять каждый из них.
WordPress-сайт можно очистить от вредоносного кода самостоятельно за 2-4 часа в типовом случае - с помощью специализированных плагинов и ручной проверки ключевых файлов.
Материал подойдёт владельцам сайтов на WordPress, которые столкнулись с заражением и хотят разобраться сами, без найма специалиста. Если у вас нет доступа к хостингу или FTP - часть шагов потребует помощи технаря.
Как понять, что сайт заражён: признаки и причины
Заражение не всегда очевидно сразу. Часть симптомов видна невооружённым глазом - пользователей внезапно перебрасывает на чужие сайты, в подвале появляются посторонние ссылки. Но вирус часто работает скрытно: делает редиректы только для незалогиненных пользователей или только для трафика из поисковиков, а в обычном браузере сайт выглядит нормально. Именно поэтому владельцы узнают о заражении не от себя, а от клиентов или от Google Search Console.
Главные причины заражения - устаревшие темы и плагины с известными уязвимостями, пиратский контент с вшитым скрытым доступом, слабые пароли к админке и FTP, а также общий хостинг, где заражение соседнего сайта перекидывается на ваш. Чаще всего я вижу именно нулёные темы и плагины - это прямой путь для заражения.
| Симптом | Вероятная причина | Что делает с сайтом |
| Редирект пользователей на сторонние сайты | Вирус-редирект в .htaccess или functions.php | Обнуляет трафик, роняет позиции в поиске |
| Предупреждение браузера «Сайт опасен» | Сайт попал в базы Google Safe Browsing или Яндекса | Блокирует переходы, количество посещений падает до нуля |
| Посторонние ссылки в коде страниц | Инъекция в базу данных или файлы тем | Ссылочный спам, санкции от поисковиков |
| Резкое снижение органического трафика | Скрытый контент для поисковых роботов | Создает страницы-дорвеи от вашего имени |
| Неизвестные файлы в папках wp-content и корне | Скрытый удалённый доступ для злоумышленника | Позволяет повторно заражать сайт после чистки |
| Нагрузка на сервер выросла без роста трафика | Майнер или спам-бот, работает в фоне | Замедляет работу сайта, часть ресурсов уходит на атаки |
Проверьте сайт через Google Search Console - раздел «Проблемы безопасности» покажет, обнаружил ли Google вредоносный код. Дополнительно проверьте через Яндекс.Вебмастер. Если ни того ни другого нет - откройте сайт в режиме инкогнито и через мобильный интернет: часть вирусов работает только для новых пользователей без куки.
Резервное копирование перед очисткой: обязательный первый шаг
Прежде чем трогать любой файл - сделайте резервную копию. Даже заражённый сайт - это ваши данные: тексты, заказы, настройки. Без копий есть риск потерять всё, если при чистке что-то пойдёт не так. Правило без исключений: сначала бэкап, потом любые действия.
Включите режим обслуживания на время работ - чтобы пользователи не видели промежуточное состояние сайта. Сделать это можно через плагин WP Maintenance Mode или вручную, добавив в .htaccess временный редирект.
Способы сделать резервную копию всех файлов и базы данных:
- Панель хостинга - большинство хостингов (Beget, TimeWeb, REG.RU) хранят автоматическое резервное копирование за последние 7-30 дней. Скачайте последнюю копию до заражения, если можете определить дату.
- FTP-клиент (FileZilla) - подключитесь к серверу и скачайте всю папку сайта на локальный компьютер. Это займёт время, но вы получите текущие файлы целиком.
- SSH + архив - если есть SSH-доступ, создайте архив командой:
tar -czf backup.tar.gz /home/user/site/и скачайте его. - phpMyAdmin - зайдите в phpMyAdmin через панель хостинга, выберите базу данных сайта, нажмите «Экспорт» и сохраните SQL-файл. Это копия всего контента, настроек и пользователей.
Для автоматического резервного копирования на постоянной основе используйте UpdraftPlus. Он сохраняет копии на Google Drive, Dropbox или Amazon S3 по расписанию. После очистки сайта - первым делом настройте его, чтобы в следующий раз у вас были актуальные версии файлов для быстрого восстановления.
Сканирование сайта: найти вредоносный код автоматически

Прежде чем запускать сканер, обновите все темы и плагины до последних версий - это закроет часть уязвимостей и не даст сканеру ложно срабатывать на устаревший код. Делаю это через административную панель: Обновления - отмечаю всё - Обновить.
Для автоматического обнаружения вредоносного кода использую два плагина.
Wordfence Security. Установите из репозитория WordPress, активируйте. После активации открываем Wordfence - Scan - Start New Scan. Плагин проверяет файлы ядра, темы и плагины на соответствие официальным версиям, ищет подозрительные паттерны. Сканирование занимает 5-15 минут - по окончании получите отчёт со списком подозрительных файлов и описанием угрозы. Бесплатная версия закрывает большинство задач при разовой очистке.
Sucuri Security. Альтернатива, которую я использую, когда Wordfence что-то пропускает. Установите плагин, откройте Sucuri Security - Malware Scan - Scan Now. Плагин проверяет целостность файлов ядра и фиксирует изменения. Отдельно проверьте сайт через онлайн-сканер Sucuri SiteCheck (sitecheck.sucuri.net) - он анализирует внешние признаки заражения: редиректы, blacklist-статус, подозрительный JavaScript в HTML-коде. Это занимает меньше минуты и не требует доступа к файлам.
После сканирования у вас на руках список подозрений. Автоматическое сканирование видит не всё - дальше идёт ручная проверка.
Ручная проверка файлов: найти вирус там, где плагин не видит
Плагин работает с паттернами и сигнатурами - вирус, написанный под конкретный сайт, или обфусцированный код он может пропустить. Поэтому ручная проверка обязательна.
Проверка дат через FTP. Подключитесь к серверу, откройте папки wp-includes и wp-admin. Отсортируйте файлы по дате изменения. Если в этих системных папках находите файлы с датой изменения, совпадающей со временем заражения, - это подозрительно. Ядро WordPress не меняется само по себе. Особое внимание на .php-файлы с нечитаемыми именами.
Признаки вредоносного кода в файлах - функции eval(), base64_decode(), file_exists() в нетипичном контексте, длинные строки из случайных символов. Часть таких вставок маскируется под комментарии или пустые строки в начале файла. Проверьте все файлы активной темы и есть ли там посторонний код.
Отдельно проверьте .htaccess в корне сайта - откройте файл и проверьте, нет ли посторонних строк RewriteRule, которые перенаправляют трафик. Классическая схема: редирект мобильных пользователей на сторонние сайты.
Конкретный тип угрозы - wp-vcd.php. Это вирус для массового заражения через nulled-темы. Ищите файл wp-vcd.php в папке темы и в wp-includes. Также проверьте functions.php активной темы на посторонний код в самом начале файла.
Поиск через SSH - быстрее всего:
find . -name "*.php" -ctime -7 Команда показывает список всех PHP-файлов, изменённых за последние 7 дней. Подставьте нужное количество дней исходя из указанного времени заражения.
Базу данных проверяю через phpMyAdmin: таблица wp_options - поля option_value для siteurl и home (редиректы), таблица wp_posts - поиском по eval( и <script в содержимом записей.
Удалить вирус: очистка файлов и базы данных
Есть три пути - выбираю в зависимости от того, что нашёл.
Через Wordfence. Открываем результаты сканирования - рядом с каждым заражённым файлом есть кнопки Repair и Delete. Repair заменяет файл чистой копией из репозитория WordPress - подходит для файлов ядра, стандартных плагинов и тем. Delete - для файлов, которых не должно существовать вообще (случайные .php в wp-content/uploads, тот же wp-vcd.php). Перед тем как нажать кнопку, убедитесь, что резервную копию уже сделали.
Замена файлов вручную. Скачайте чистый дистрибутив WordPress с wordpress.org - той же версии, что стоит на сайте. Заражённые файлы ядра (wp-login.php, файлы из wp-includes, wp-admin) заменяю через FTP чистыми. Темы и плагины - аналогично: скачиваю оригинал, заменяю папку целиком. Не трогаю только wp-content/uploads и wp-config.php.
Ручное удаление вредоносного кода. Если вирус вставлен в файл темы или кастомный плагин - открываем файл, находим подозрительный участок, вырезаем только его. После этого проверяем, что сайт работает нормально.
Удаление из базы данных: в phpMyAdmin выполняю SQL-запрос для поиска и очистки вредоносных записей в wp_options и wp_posts. Если в некоторых записях найден eval() или посторонний скрипт - редактирую значение поля напрямую.
Если на одном хостинге несколько сайтов - проверьте все. Вирус, попавший на один сайт, в большинстве случаев уже распространился на соседние через общие папки.
После очистки запустите повторное сканирование Wordfence - отчёт должен быть чистым. Если угрозы ещё обнаруживаются, повторите цикл: найти, удалить, проверить.
Как закрыть доступ после очистки: обновления, пароли, защита

Чистка сайта от вируса - это половина дела. Если не закрыть входные точки, заражение повторится через те же дыры. Из практики: один клиент чистил сайт каждый месяц на протяжении полугода. Разбирались, откуда берётся вирус снова, и оказалось - никто не поменял пароль FTP после первого взлома. Злоумышленники заходили через старые данные и заливали вредоносный код повторно. После смены пароля проблема ушла.
После очистки делаю следующее в обязательном порядке:
- Сброс всех паролей. Меняю пароль администратора WordPress, FTP, базы данных и панели хостинга. Для некоторых владельцев это неочевидно, но доступ по FTP - одна из самых частых точек повторного входа.
- Удаляю неиспользуемые темы и плагины. Административной панели не нужен балласт - каждый неактивный плагин это потенциальная дыра.
- Обновляю все компоненты до последних версий. Темы и плагины, ядро WordPress - всё должно быть актуальным. Большинство последующих заражений происходит именно через устаревшие версии.
- Включаю двухфакторную аутентификацию для входа в административную панель. Использую WP 2FA или Google Authenticator - это занимает 10 минут, но постоянно блокирует подбор паролей.
- Настраиваю автоматическое резервное копирование через UpdraftPlus. Открываем настройки плагина, выбираем удобное расписание - например, ежедневно, и указываем облачное хранилище.
- Ограничиваю доступ к wp-admin по IP через .htaccess или специальный плагин. Это не всегда возможно при динамическом IP, но если IP статический - получите дополнительный уровень защиты.
- Выключаю режим обслуживания после окончания всех работ и ставлю постоянный мониторинг через Wordfence или Sucuri.
Количество повторных заражений после таких мер падает до минимума. Текущие угрозы никуда не деваются, но злоумышленники переключаются на менее защищённые цели. Выберите хотя бы пять пунктов из этого списка - и сайт перестанет быть лёгкой добычей.
Статья основана на личном опыте автора и актуальна на момент публикации. Интерфейсы сервисов и алгоритмы поисковых систем регулярно меняются - рекомендую проверять актуальность инструкций на официальных ресурсах. Если остались вопросы - задайте их в комментариях.
Список литературы
- WordPress Foundation - Hardening WordPress // WordPress Codex (codex.wordpress.org), 2024
- Wordfence Team - How to Clean a Hacked WordPress Site using Wordfence // Wordfence Documentation (wordfence.com), 2025
- Sucuri Research Team - How to Remove Malware from WordPress // Sucuri Blog (blog.sucuri.net), 2024
- Sucuri Research Team - How to Remove Malware & Fix a Hacked WordPress Site // Sucuri Guides (sucuri.net), 2023







