Проверка сайта на вирусы: как понять, что сайт заражён, и что делать

Коротко

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

Надёжная проверка состоит из трёх уровней: внешние сервисы и панели поисковых систем, проверка файлов и базы на сервере, сверка ядра CMS с оригиналом. Если заражение подтвердилось, сайт нужно не просто «почистить», а найти точку входа, закрыть её и сменить все доступы. Иначе вирус вернётся через неделю.

Уровень проверкиЧто находитЧего не видит
Онлайн-сканер по URLВредоносные скрипты в HTML, редиректы, домен в чёрных спискахСкрытые файлы, бэкдоры, код для отдельных посетителей
Яндекс Вебмастер и Search ConsoleПредупреждения поисковиков, заражённые страницы в выдачеСвежее заражение, которое ещё не просканировали
Сканер на сервереПодозрительные PHP-файлы, известные сигнатурыНовые и хорошо замаскированные вставки
Сверка ядра CMSИзменённые системные файлы WordPress или БитриксКод в теме, шаблоне, своих модулях и базе

Основная мысль

Онлайн-сервис отвечает на вопрос «видно ли заражение снаружи», а не «чист ли сайт»: чистым сайт можно считать только после проверки файлов, базы и доступов на сервере.

Большинство вредоносных вставок устроено так, чтобы их не заметил владелец. Код показывает рекламу или перенаправляет только мобильных посетителей, только пришедших из поиска или только тех, кто заходит впервые. Администратор, который открывает сайт из закладки, видит обычную страницу, а сканер, зашедший без нужных признаков, получает чистый HTML.

Поэтому к результату «угроз не найдено» стоит относиться как к отсутствию явных симптомов. Если при этом есть жалобы клиентов, странные письма от хостинга или предупреждения в поиске, нужно идти глубже — в файлы и базу данных.

Проверка сайта на вирусы онлайн: какие сервисы использовать

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

Внешние сканеры по адресу сайта

Онлайн-сканер загружает страницу, анализирует HTML и подключаемые скрипты и сверяет домен с базами опасных сайтов. Популярные варианты — VirusTotal, который проверяет адрес сразу по десяткам антивирусных баз, и Sucuri SiteCheck, который показывает найденные вредоносные вставки и статус в чёрных списках.

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

Панели поисковых систем

Яндекс Вебмастер сообщает о заражении в разделе про безопасность и нарушения, а на главной странице панели появляется предупреждение. У Google аналогичные сведения есть в Search Console, в разделе о проблемах безопасности. Если сайт ещё не добавлен в панели, стоит сделать это сразу: вот инструкция, как добавить сайт в Яндекс Вебмастер и подтвердить права.

Предупреждение от поисковика — самый серьёзный сигнал. В выдаче рядом с сайтом может появиться пометка об опасности, а браузеры показывают посетителям предупреждающую страницу. Трафик в такой ситуации падает за несколько дней.

Как проверять правильно

  1. Откройте сайт в режиме инкогнито с мобильного телефона через мобильный интернет, а не через офисный Wi-Fi.
  2. Зайдите на сайт из поиска Яндекса по брендовому запросу, а не напрямую по адресу.
  3. Прогоните главную и 3–5 внутренних страниц через два разных онлайн-сканера.
  4. Проверьте уведомления в Яндекс Вебмастере и Search Console.
  5. Запишите, что именно вы увидели: адрес редиректа, текст рекламы, время. Это пригодится при лечении.

Признаки заражения: как понять, что на сайте появился вирус

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

Что видят посетители

  • перенаправление на казино, «выигрыши», сомнительные магазины, особенно с телефона;
  • всплывающая вирусная реклама на сайте, которую вы не размещали;
  • предупреждение браузера об опасном сайте;
  • запрос на установку «обновления браузера» или загрузку файла;
  • лишние поля в форме оплаты или оформления заказа.

Что видит владелец

  • письмо от хостинга о рассылке спама или повышенной нагрузке;
  • в поиске по сайту через оператор site: появились страницы на чужую тему, часто на иностранном языке;
  • резкий рост числа страниц в индексе или в карте сайта;
  • новые администраторы в CMS, которых никто не создавал;
  • незнакомые PHP-файлы в папках загрузок, кэша или в корне сайта;
  • сайт стал заметно медленнее, а нагрузка на процессор выросла без роста посещаемости.

Вирус-реклама на сайте: отдельный случай

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

Как найти вирус на сайте: проверка на сервере

Найти вирус на сайте без доступа к файлам не получится. Нужен доступ по SSH или хотя бы по FTP и к панели хостинга. Перед любыми действиями сделайте полную копию файлов и базы — даже заражённую. Она нужна, чтобы понять, что именно произошло, и ничего не потерять при чистке. Подробнее о копиях — в статье про резервное копирование сайта на WordPress и 1С-Битрикс.

Антивирус хостинга и серверные сканеры

У многих хостингов есть встроенный антивирус в панели управления. Он проверяет файлы по сигнатурам и показывает список подозрительных. На своём сервере используют ClamAV, Linux Malware Detect или специализированные сканеры для сайтов вроде AI-Bolit. Они находят известные вредоносные шаблоны, но дают и ложные срабатывания: сжатый код плагинов и обфусцированные лицензионные модули часто попадают в список.

Поиск по характерным признакам

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

find . -type f -name "*.php" -mtime -7
grep -rl "eval(base64_decode" --include="*.php" .
grep -rl "gzinflate(" --include="*.php" .
find ./wp-content/uploads -type f -name "*.php"

Последняя команда для WordPress особенно полезна: в папке загрузок PHP-файлов быть не должно. Их появление — почти гарантированный признак взлома. Для 1С-Битрикс аналогично проверяют папку upload.

Код вируса на сайте: как он выглядит

Код вируса на сайте редко выглядит очевидно. Типичные варианты:

  • длинная строка из случайных символов, которая расшифровывается и выполняется через eval;
  • тег script, подключающий файл с чужого домена, в шапке или подвале шаблона;
  • небольшой файл с безобидным названием вроде wp-cache.php или config-old.php, который выполняет команды из запроса;
  • вставка в начало index.php или в файл .htaccess с правилами перенаправления для мобильных и поисковых посетителей;
  • JavaScript в полях базы данных: в настройках темы, виджетах, текстах записей.

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

Проверка базы данных

В WordPress вредоносный код часто прячут в таблицах wp_options и wp_posts, в Битриксе — в свойствах инфоблоков и настройках модулей. Ищут вхождения script с внешними доменами, iframe и закодированные строки. Отдельно стоит проверить таблицу пользователей: лишний администратор — прямой признак взлома.

Сверка ядра WordPress и 1С-Битрикс

Самый точный способ найти изменённые системные файлы — сравнить их с оригиналом. Обе CMS это позволяют.

WordPress

Через WP-CLI ядро сверяют с контрольными суммами из официального репозитория командой wp core verify-checksums, а плагины из каталога WordPress.org — командой wp plugin verify-checksums —all. Всё, что отличается или лишнее, требует разбора. Платные плагины и темы так не проверить — их сравнивают с чистым дистрибутивом от разработчика.

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

1С-Битрикс

В Битриксе есть модуль «Проактивная защита». В нём есть сканер безопасности, который ищет подозрительный код и слабые настройки, и контроль целостности, который сравнивает файлы с сохранённым эталоном. Контроль целостности полезен, если эталон сняли, когда сайт был чистым. Если его никогда не настраивали, придётся сравнивать ядро с дистрибутивом той же версии.

Отдельного внимания требуют сторонние решения из Маркетплейса: устаревший модуль с уязвимостью — частая точка входа. О том, как их обновлять без риска, — в статье про модули 1С-Битрикс.

Удалить вирусы на сайте: порядок действий

Удалить вирусы на сайте — это не удалить один файл, на который указал сканер. Если не закрыть уязвимость, через которую прошёл взлом, код вернётся. Ниже порядок, который работает для WordPress и 1С-Битрикс.

Пошаговый план лечения

  1. Сделайте полную копию текущего состояния сайта и базы.
  2. Если сайт заражает посетителей, закройте его заглушкой или ограничьте доступ по IP на время работ.
  3. Смените пароли: хостинг, FTP и SSH, база данных, все администраторы CMS, почта, на которую приходит восстановление доступа.
  4. Удалите лишних пользователей с правами администратора.
  5. Замените ядро CMS чистой копией той же версии.
  6. Переустановите плагины, темы и модули из официальных источников, удалите неиспользуемые.
  7. Проверьте свой код — шаблон, дочернюю тему, доработки — построчно или сравнением с репозиторием.
  8. Очистите базу от вставок и лишних записей.
  9. Найдите точку входа по логам веб-сервера: какие файлы вызывались POST-запросами перед заражением.
  10. Обновите CMS, модули и версию PHP, закройте найденную уязвимость.
  11. Повторно просканируйте файлы и сайт снаружи, проверьте несколько дней подряд.

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

Если есть чистая резервная копия, сделанная до заражения, восстановление из неё часто быстрее ручной чистки. Но у копии есть два ограничения. Во-первых, нужно точно знать дату заражения: бэкдор мог появиться за месяц до видимых симптомов. Во-вторых, восстановление не закрывает уязвимость — после него всё равно нужны обновления и смена паролей. Подробный разбор сценария есть в статье взломали WordPress: как восстановить сайт.

Что делать после чистки

Когда сайт чист, отправьте запрос на перепроверку в Яндекс Вебмастере и Search Console. Пометка в выдаче снимается после того, как поисковик повторно просканирует сайт. Сроки зависят от поисковой системы, поэтому не стоит повторять запрос каждый час — сначала убедитесь, что всё действительно удалено.

На сайте вирусы: что делать в первые часы

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

СитуацияПервое действие
Посетителей перенаправляет на чужие сайтыЗакрыть сайт заглушкой, сменить пароли
Хостинг заблокировал сайт за спамСвязаться с поддержкой, получить список файлов
Пометка «опасный сайт» в поискеНайти и удалить код, отправить на перепроверку
Чужие страницы в индексеУдалить файлы и страницы, отдать 404 или 410
Изменены реквизиты оплаты или форма заказаСрочно закрыть оплату, сообщить банку и клиентам

Чего не делать

  • не удалять файлы наугад по списку сканера — можно уронить сайт;
  • не восстанавливать копию, не проверив её;
  • не ограничиваться сменой пароля администратора CMS;
  • не ставить три плагина безопасности одновременно — они конфликтуют и тормозят сайт;
  • не ждать, что «само пройдёт»: поисковики понижают заражённые сайты.

Как защитить сайт после лечения

Чистка без защиты — временная мера. После неё нужно закрыть самые частые пути, которыми вредоносный код попадает на сайт.

Доступы и пользователи

Каждому сотруднику и подрядчику — отдельная учётная запись с минимально нужными правами. Контент-менеджеру не нужен доступ администратора, а бухгалтеру, который выгружает заказы, — доступ к настройкам модулей. Для входа в админку включите двухфакторную аутентификацию, для SSH используйте ключи вместо паролей. Когда подрядчик заканчивает работу, его учётную запись удаляют сразу, а не «когда-нибудь».

Обновления и лишний код

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

Настройки сервера

Несколько настроек на уровне сервера заметно усложняют жизнь злоумышленнику:

  • запрет выполнения PHP в папках загрузок;
  • права на файлы, при которых веб-сервер не может переписать ядро CMS;
  • актуальная поддерживаемая версия PHP;
  • отдельный пользователь и изоляция для каждого сайта, если на одном аккаунте их несколько;
  • ограничение доступа к админке по IP, если команда работает из офиса.

Мониторинг

Удобно, когда о проблеме вы узнаёте раньше клиентов. Для этого подключают уведомления от панелей поисковиков, контроль изменения файлов через плагин безопасности или модуль «Проактивная защита» и внешний мониторинг доступности. В Битриксе после чистки стоит заново снять эталон для контроля целостности, чтобы следующие изменения было видно сразу. Если сайт регулярно становится мишенью атак и падает под нагрузкой, стоит отдельно заняться защитой от DDoS-атак на уровне хостинга и сети.

На чём опасно экономить

Типичные ошибки, из-за которых заражение повторяется:

  • Нулевые обновления. Устаревшие плагины WordPress и модули Битрикс — главная причина взломов. Как обновлять без поломок, разобрано в статье как обновить WordPress, тему и плагины.
  • Взломанные «nulled» темы и модули. Бесплатная копия платного продукта часто уже содержит бэкдор.
  • Общий пароль на всё. Один и тот же пароль к хостингу, FTP и админке открывает всё сразу.
  • Бэкапы на том же сервере. При взломе они заражаются или удаляются вместе с сайтом.
  • Доступ у бывших подрядчиков. Учётные записи и SSH-ключи людей, которые давно не работают с сайтом.
  • Старая версия PHP. Она перестаёт получать исправления безопасности.

Чек-лист регулярной проверки

  • раз в неделю — уведомления Яндекс Вебмастера и Search Console;
  • раз в месяц — онлайн-сканер по главной и ключевым страницам;
  • раз в месяц — список администраторов CMS;
  • после каждого обновления — проверка работы сайта и форм;
  • раз в квартал — серверный сканер и сверка ядра;
  • постоянно — резервные копии вне основного сервера с хранением не менее месяца.

Частые вопросы

Можно ли доверять проверке сайта на вирусы онлайн?

Как первичному тесту — да. Онлайн-сканер хорошо находит явные вставки и попадание в чёрные списки. Но он не видит файлы на сервере и код, который включается только для части посетителей, поэтому «чистый» результат не гарантирует отсутствие заражения.

Как бесплатно проверить сайт на вирусы онлайн?

Используйте два-три бесплатных сканера по URL и уведомления в Яндекс Вебмастере и Search Console. Проверяйте разные типы страниц и заходите на сайт с телефона через поиск.

Как найти вирус на сайте, если сканеры ничего не видят?

Проверить файлы на сервере: изменённые за последние дни PHP-файлы, PHP в папке загрузок, закодированные строки с eval. Затем сверить ядро CMS с оригиналом и просмотреть базу данных.

Откуда на сайте появился вирус?

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

Почему вирусная реклама видна только с телефона?

Вредоносный код специально показывает рекламу или редирект мобильным посетителям и тем, кто пришёл из поиска. Так владелец дольше не замечает проблему.

Что делать, если хостинг заблокировал сайт из-за вируса?

Запросите у поддержки список заражённых файлов и логи. Обычно хостинг открывает доступ для чистки, после чего проверяет сайт повторно.

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

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

Как быстро снимут пометку об опасности в поиске?

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

Сколько времени занимает лечение сайта?

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

Нужно ли сообщать клиентам о заражении?

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

Опасен ли вирус на сайте для посетителей?

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

Итог

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

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

Если вы подозреваете, что сайт заражён, я как частный разработчик на WordPress и 1С-Битрикс проверю файлы и базу, найду точку входа и вылечу сайт. Подробности — на странице лечение сайта от вирусов. Работаю напрямую, без посредников.

Что будем искать? Например,Продвижение