Иногда даже опытный разработчик может «взломать сам себя». В этой статье я рассказываю, как антивирус на хостинге поднял тревогу, я решил, что сайт заражён, откатил систему — а потом понял, что никакого взлома не было. Зато получил полезный урок по безопасности.
Хотите, чтобы сайт на Битриксе был защищён и работал без неожиданных “взломов”? Я помогу проверить систему, закрыть уязвимости и настроить защиту, пока не стало поздно.
Как всё началось
Обычный вечер, спокойная работа — и внезапно уведомление от хостинга: «На сайте обнаружен вирус base64». Сайт на Битриксе при этом работает стабильно. Первая мысль — взломали через модуль комментариев: я недавно ставил и дорабатывал его под продакшн.
Чтобы не рисковать и не словить проблемы в поиске, я оперативно откатил сайт на пару дней назад: восстановил файлы и базу. После этого сел разбираться, что произошло на самом деле.
Где зарыта «угроза»
В панели хостинга антивирус ругался на фрагмент кода с base64_decode. Но когда я открыл файл, оказалось, что “заражённый” участок находился в кэше статьи, где я показывал пример кода с Prism.js.
Prism.js — это библиотека для подсветки примеров кода. В статье я демонстрировал, как работает base64, и этот кусок закешировался. Хостинг-антивирус увидел знакомую сигнатуру и решил, что это вирус. На деле это был обычный пример кода, а не вредоносный скрипт.
То есть никто сайт не взламывал — просто я сам себе устроил «чрезвычайную ситуацию».
Что я сделал неправильно
Я часто повторяю клиентам: «Главное оружие разработчика — анализ, а не паника». А сам на секунду про это забыл. Вот что я сделал не так:
- Не проверил, какой именно файл вызывает тревогу — паника быстрее логики;
- Не посмотрел, в каком месте сработал антивирус: в ядре, модуле или стороннем скрипте;
- Не сверил контрольные суммы файлов Битрикса, чтобы понять, тронуты ли системные файлы;
- Не проверил логи сервера и авторизаций — возможно, никто и не заходил;
- Не прогнал файл через онлайн-анализатор вроде VirusTotal;
- Сразу откатил сайт, вместо того чтобы изолировать файл и спокойно проанализировать;
- Не исключил из проверки папку
/local/js/prism/с демонстрационными скриптами; - Потерял часть свежих правок — не сделал снапшот текущего состояния;
- Удалил всё “подозрительное” — и вместе с этим часть полезного кода;
- И, главное, поддался эмоциям, хотя нужно было просто хладнокровно посмотреть в код.
Почему антивирус сработал ложно
Антивирус не умеет анализировать логику — он просто сравнивает код с базой сигнатур. А base64 действительно часто встречается в вирусах. Но сам по себе это лишь способ закодировать текст, не более.
Многие легальные скрипты, включая Prism.js, CKEditor и Data URI для изображений, используют base64. Поэтому антивирус может ошибаться, особенно если код кэшируется или содержит примеры для разработчиков.
Как не попасть в настоящую атаку
После этого случая я пересмотрел подход к защите сайтов. Вот короткий чек-лист, который советую использовать всем владельцам сайтов на 1С-Битрикс:
- Регулярно обновляйте ядро и модули 1С-Битрикс — хотя бы раз в месяц;
- Проверяйте права на файлы — никаких
777, только нужные уровни доступа; - Ограничьте доступ к админке по IP;
- Используйте безопасное подключение
SFTPвместо FTP; - Делайте резервные копии вне публичной папки
/public_html; - Используйте сложные пароли и двухфакторную авторизацию;
- Следите за логами изменений и регистрацией новых пользователей;
- Не игнорируйте профилактику — хотя бы раз в квартал проводите аудит безопасности.
Пятнадцать минут профилактики дешевле, чем сутки восстановления сайта после заражения.
Вывод
Этот случай напомнил мне и, думаю, многим владельцам сайтов: даже если всё работает идеально, никто не застрахован от ложных тревог. Антивирус может ошибиться, скрипт может закешироваться, а человеческий фактор включить панику.
Главное — спокойствие, анализ и системность. Тогда никакой «взлом» не собьёт вас с курса.
Если сайт уже “ругается” на вирусы или антивирус присылает тревожные письма — не ждите, пока хостинг его заблокирует. Проведу диагностику, вычищу код и настрою защиту, чтобы таких историй больше не повторилось.
Комментарии (0)