Сайт заражён вирусом, что делать - вопрос, который прилетает мне обычно не в спокойной обстановке, а когда хостинг уже прислал письмо о блокировке аккаунта, Google Safe Browsing показывает посетителям красный экран с предупреждением, а органический трафик за сутки просел в разы. За практику разбирал десятки таких случаев - от лендингов на Tilda с воткнутым в код зоны скриптом до интернет-магазинов на WooCommerce, где вредоносный код жил в файлах плагина эквайринга больше полугода. Ниже - как отличить реальное заражение от ложной тревоги, как проверить сайт самостоятельно и что делать по шагам, если заражение подтвердилось.
Признаки, что сайт заражён вирусом или взломан
Чаще всего заражение обнаруживают не по логам, а по побочным эффектам, которые видят посетители или поисковики раньше владельца:
- браузер или антивирус показывает предупреждение при заходе на сайт;
- сайт или отдельные страницы редиректят на казино, фарму или порно - часто только с мобильных устройств или только из поискового трафика, это называется клоакингом и сильно затрудняет обнаружение;
- в выдаче Яндекса или Google рядом с сайтом стоят спам-фразы, которых нет на самих страницах - они подставляются заражённым кодом только ботам поисковика;
- в Яндекс.Вебмастере или Google Search Console появилось уведомление в разделе «Безопасность и нарушения» / Security issues;
- хостинг прислал письмо о блокировке аккаунта за рассылку спама или сканирование чужих серверов;
- сайт резко начал тормозить, а нагрузка на CPU выросла без роста трафика - частый признак майнера, запущенного через закладку;
- в списке администраторов CMS появился пользователь, которого никто не создавал.
Любой из этих пунктов сам по себе может быть совпадением, но два-три сразу - почти гарантированно заражение, и тянуть с проверкой не стоит: пока сайт открыт, вирус может успеть разослать себя дальше по серверу или добавить ещё один бэкдор про запас.
Как проверить сайт на вирусы и вредоносный код
Первым делом смотрю два бесплатных источника, которые ничего не требуют от владельца, кроме подтверждённого доступа к сайту в панели вебмастера: раздел «Безопасность и нарушения» в Яндекс.Вебмастере и Security Issues в Google Search Console. Если сайт уже попал в чёрный список, там будет написано, что именно нашли и на каких страницах - это экономит часы ручного поиска.
Дальше проверяю файлы напрямую. На хостинге или через SSH сортирую файлы по дате изменения - вредоносный код почти всегда лежит в файлах, изменённых позже, чем последний легитимный релиз темы или плагина:
find /var/www/site -type f -mtime -14 -name "*.php" | xargs ls -la
grep -rl "eval(base64_decode|eval(gzinflate|str_rot13(" /var/www/site/wp-content
Эта связка находит большинство закладок в WordPress: злоумышленники почти всегда прячут код через base64_decode, gzinflate или похожие функции, чтобы антивирусный сканер хостинга не увидел явный вызов подозрительной команды. Дополнительно стоит свериться с оригинальными файлами ядра через wp core verify-checksums - команда сравнивает файлы сайта с эталонными и показывает, что было изменено вручную.
Если доступа к серверу нет или CMS самописная, помогает внешняя проверка через VirusTotal - он прогоняет URL по десяткам антивирусных баз и показывает, кто именно и за что помечает сайт как опасный.
Бесплатный материал
🎁 Полезный скрипт в подарок
Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.
Без спама. Отписка в 1 клик.
Где чаще всего живёт вирус - WordPress, Tilda и самописные сайты
Путь заражения сильно зависит от движка, и стоит понимать разницу, чтобы не искать вирус там, где его физически не может быть.
| Платформа | Типичный вход | Что обычно делает вирус |
|---|---|---|
| WordPress | нулленные темы/плагины, устаревшие версии с известными уязвимостями, папка uploads с разрешённым выполнением PHP | редиректы, спам-ссылки в футере, майнер, рассылка со взломанной почты |
| WooCommerce + эквайринг | уязвимый плагин оплаты или чекаута | скрипт-перехватчик (по типу Magecart), который снимает данные карты с формы до того, как они уйдут в виджет Т‑Банка |
| Tilda | сторонний скрипт в зоне T123/head, добавленный когда-то подрядчиком, либо утечка пароля от аккаунта Tilda | подмена ссылок, майнер в браузере посетителя, фейковый виджет отслеживания СДЭК с редиректом на фишинг |
| Самописные сайты, боты на aiogram | токен API или ключ базы данных, случайно закоммиченный в публичный GitHub-репозиторий | бот используется для рассылки спама или майнинга под чужим лицом, база утекает целиком |
| Автоматизации n8n | вебхук без авторизации, открытый наружу | чужие люди дёргают ваш workflow и через него выгружают данные или спамят в подключённые каналы |
Отдельно стоит сказать про магазины на WooCommerce с интеграцией Т‑Банка или другого эквайринга: там вирус редко трогает саму витрину, потому что цель - не испортить сайт, а тихо собирать номера карт на этапе оформления заказа. Такое заражение живёт неделями незамеченным, пока клиенты не начнут жаловаться на списания.
Что делать владельцу сайта: пошаговый план
1. Изолировать сайт
Включаю режим обслуживания или временно закрываю доступ через .htaccess/hosting панель, чтобы вирус не разослал себя дальше и не собирал новые данные, пока идёт лечение.
2. Сохранить копию заражённой версии
Перед тем как что-то удалять, делаю полный бэкап файлов и базы в отдельное место - если потом понадобится разбираться, откуда именно пришло заражение, или обращаться в хостинг с претензией, эта копия единственное доказательство.
3. Сменить все пароли и ключи
Пароль от хостинга, FTP/SSH, админки CMS, базы данных, все API-ключи из .env или конфигов - меняю разом, потому что при взломе через утечку пароля старый доступ мог остаться у злоумышленника даже после чистки файлов. Где можно, включаю двухфакторную аутентификацию.
4. Найти и удалить вредоносный код
Сверяю файлы ядра и плагинов с чистыми оригиналами, удаляю неизвестных администраторов из базы, чищу .htaccess от чужих RewriteRule, ищу файлы-шеллы вроде c99 или WSO в папке uploads - они почти всегда с расширением .php и странным именем типа wp-cache-1a2b.php.
5. Обновить всё до актуальных версий
Ядро CMS, все плагины и темы - до последних версий, нулленные компоненты удаляю целиком и заменяю официальными или переписываю функциональность заново.
6. Проверить cron-задачи
В WordPress через wp cron event list, на сервере через crontab -l - злоумышленники часто ставят запланированную задачу, которая восстанавливает заражение сразу после чистки файлов вручную.
7. Закрыть дыру, через которую зашли
Без этого шага весь предыдущий труд бессмысленный: если уязвимость в конкретном плагине или открытом порту осталась, заражение вернётся за пару дней.
Как снять сайт с чёрных списков после чистки
После лечения сайт всё ещё может числиться опасным в базах Google и Яндекса - эти пометки не пропадают автоматически. В Google Search Console в разделе Security Issues есть кнопка запроса на повторную проверку, обычно ответ приходит за 24-72 часа, если заражение реально устранено. В Яндекс.Вебмастере аналогичный запрос в разделе «Безопасность и нарушения» рассматривают чуть дольше, иногда до нескольких дней.
Первые одну-две недели после чистки стоит мониторить сайт особенно внимательно: ставлю проверку файлов на изменение раз в сутки и слежу за уведомлениями от антивирусного сканера - большинство повторных заражений происходит именно в этот период через забытый бэкдор или незакрытую уязвимость.
Сколько стоит лечение и когда звать разработчика
Если сайт простой и заражение свежее, шаги 1-3 можно пройти самостоятельно за пару часов при базовом опыте работы с хостингом. Но если на сайте завязаны интеграции с CRM, эквайрингом или СДЭК, лезть руками рискованно - можно случайно сломать рабочую связку вместе с вирусом, а потом чинить уже не заражение, а сломанные платежи.
Разовый аудит и консультация по конкретному случаю - от 3 000 ₽, постоянный мониторинг с ежемесячными проверками - техподдержка от 15 000 ₽/мес. Если после чистки выясняется, что движок настолько устарел, что проще собрать сайт заново, обычно предлагаю посмотреть на услуги по разработке и поддержке сайтов - на дистанции это дешевле, чем бесконечно латать дыры в древнем WordPress без обновлений.
Чтобы сайт работал без сбоев
Техподдержка
от 15 000 ₽/мес
Подробнее →Частые вопросы
Как быстро вирус попадает обратно на сайт после чистки?
Чаще всего в течение первых нескольких дней, если не закрыта исходная уязвимость или остался хотя бы один незамеченный бэкдор-файл. Именно поэтому после лечения важно проверять сайт ежедневно минимум неделю, а не одноразово.
Можно ли вылечить сайт без доступа к хостингу?
Частично - можно почистить файлы и базу через админку CMS, но полноценно закрыть дыру и проверить cron-задачи без доступа к серверу не получится. Если хостинг заблокировал аккаунт, сначала нужно восстановить к нему доступ через тикет в поддержку.
Влияет ли заражение на позиции в поисковой выдаче?
Да, и заметно: попадание в чёрный список Google Safe Browsing или пометка в Яндексе почти сразу обрушивает переходы из органики, а после снятия блокировки позиции восстанавливаются не мгновенно - поисковикам нужно время на переобход и пересчёт доверия к домену.
Как понять, что вирус пришёл именно через плагин, а не через хостинг?
Смотрю на дату изменения заражённых файлов и сопоставляю с логами хостинга: если взлом произошёл на нескольких независимых сайтах одного хостера одновременно, вероятнее уязвимость в конфигурации сервера. Если пострадал только один сайт с конкретным нулленным плагином - почти всегда точка входа именно в нём.