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

- Клиент
- La Chatte, свой продукт
- Отрасль
- Безопасность сайтов
- Задача
- Сервис, который сам находит уязвимости и следы взлома
- Что делали
- Осмотр снаружи, проверка файлов, кабинет, отчёты, оплата
- Период
- 26 сентября – 9 октября 2026 года
Оглавление
- Кто клиент
- С чего началось: проверили свой сайт чужим сканером
- Какой сканер нам был нужен
- Уровень 1. Осмотр снаружи за пару минут
- Проверили на настоящих взломах
- Своя защита приняла сканер за взломщика
- Как мы боремся с ложными тревогами
- Уровень 2. Проверка изнутри: то, что снаружи не видно
- Уровень 3. Глубокая проверка: только по договору
- Кабинет: чтобы сервисом пользовались без нас
- Как шла работа по дням
- Что получилось
- Что это значит для вашего сайта
- Для технических специалистов
Это кейс про наш собственный продукт. Мы сделали «Мышелов»: онлайн-сервис, который проверяет сайт на уязвимости и следы взлома. Владелец вводит адрес, подтверждает, что сайт его, и через пару минут получает понятный отчёт: что нашли, чем это грозит и как закрыть. От первого замера до работающего сервиса прошло две недели.
Почему мы взялись. Мы лечим сайты после взлома: только за последние месяцы через наши руки прошли магазины на 1С-Битриксе, Tilda и InSales. Владельцы после лечения спрашивают одно и то же: «А как понять заранее, что с сайтом что-то не так?». Готового ответа, которому мы сами доверяли бы, у нас не было.

Кто клиент
Клиент здесь мы сами. La Chatte с 2014 года делает сайты, ведёт их на поддержке и внедряет искусственный интеллект в бизнес. Сайты наших клиентов в основном на WordPress и 1С-Битриксе. Именно их чаще всего взламывают: ставят на страницы скрытые ссылки на казино, перенаправляют посетителей на чужие сайты, прячут в файлах программы-закладки.
«Мышелов» нужен двум группам людей. Первая: владельцы сайтов, которые хотят сами раз в месяц проверять, всё ли в порядке. Вторая: наша команда поддержки, которой нужен быстрый и одинаковый осмотр для каждого нового сайта.
С чего началось: проверили свой сайт чужим сканером
26 сентября мы заказали бесплатную проверку своего сайта la-chatte.com в одном из популярных онлайн-сканеров. На время проверки включили на сайте подробный журнал: какой адрес запрашивали, каким способом, во сколько.
Вот что показал журнал:
- Проверка шла 13,5 часа. На сайте сканера обещано «обычно несколько часов».
- 12 692 запроса к сайту, 8 678 разных адресов. Большая часть проверок была про системы, которых на нашем сайте нет: китайские корпоративные программы, серверы на Java.
- 42 запроса были из тех, которыми на сайте меняют и удаляют данные. Сайт сканера при этом обещает, что ничего не трогает. Наш сайт на все такие запросы ответил отказом, вреда не было. Но обещание шире того, что делает программа.
В отчёте было две находки. Одна настоящая: на сайте остался забытый служебный файл с журналом ошибок. Мы удалили его на следующий день. Вторая, со «средним» уровнем опасности и первой строкой отчёта, касалась плагина для галерей. Этого плагина на нашем сайте нет и никогда не было. Сканер сам запросил его файлы и получил ответ «не найдено», но всё равно записал его в уязвимости.
Отсюда вывод. Проверка «на всё подряд» долгая, шумная и ошибается там, где владелец сайта не сможет это проверить сам. Он просто испугается или перестанет верить отчётам.
Какой сканер нам был нужен
Мы записали четыре правила и сверяли с ними каждое решение.
- Сначала только смотрим. На первом уровне сканер лишь читает то, что сайт и так отдаёт любому посетителю. Никаких попыток что-то записать, изменить, подобрать пароль.
- Сначала узнаём, на чём сайт, потом проверяем. Если сайт на WordPress, нет смысла проверять уязвимости Битрикса. Меньше лишних запросов, меньше ложных тревог.
- Объясняем словами владельца. Каждая находка в отчёте: что нашли, чем это грозит бизнесу, как закрыть и кому передать. Подробности для разработчика идут ниже.
- Честно пишем, чего не видим. Зелёный цвет в отчёте значит «наши проверки ничего не нашли», а не «сайт в безопасности». И в каждом отчёте есть список того, что осмотр снаружи увидеть не может.
Уровень 1. Осмотр снаружи за пару минут
Первую версию осмотра мы собрали к 30 сентября. Сканер открывает сайт так, как его открыл бы обычный посетитель, поисковый робот или человек с телефона, и сравнивает, что они видят. Если поисковику показывают одно, а людям другое, это верный признак взлома.
Что проверяется:
- Скрытые чужие ссылки. Ссылки на казино и сайты для взрослых, которые спрятаны от глаз: нулевой размер, белое на белом, за краем экрана. Сканер смотрит главную и до 40 внутренних страниц.
- Переадресации на чужие сайты. Особенно коварные: срабатывают только у тех, кто пришёл из Яндекса или Google, а владелец, который открывает сайт напрямую, ничего не замечает.
- Забытые файлы. Копии базы данных, архивы сайта, файлы с паролями, служебные журналы. Около 100 типичных адресов, для WordPress 120. Находкой считаем только файл, который действительно открылся и по содержимому оказался тем, чем назван.
- Забытые копии сайта. Тестовые и старые версии на поддоменах вроде dev. и old. Их ищем по открытым журналам выдачи сертификатов, а не перебором.
- Устаревшие программы. Версия WordPress, плагинов и темы сверяется с открытой базой известных уязвимостей. У Битрикса снаружи видна дата файлов ядра.
- Настройки защиты. Сертификат и сколько дней ему осталось, защитные заголовки, настройки почты домена, чтобы письма от вашего имени не подделывали.
- Репутация и история. Не помечен ли сайт как опасный, и что было на нём год назад по веб-архиву. Так видно, когда появилась вставка.
Весь осмотр занимает около двух минут и примерно 200 запросов, из них к самому сайту около 170. Между запросами пауза 0,4 секунды. Сравните с 12 692 запросами за 13,5 часа.
Проверили на настоящих взломах
Сканер, который ни разу не ловил настоящий взлом, ничего не стоит. Поэтому первым делом мы прогнали его по сайту клиента, которого сами лечили в сентябре. Тогда наши специалисты вручную нашли в подвале сайта блок со скрытыми ссылками на казино и программу, которая этот блок подсаживала.
- Скрытых ссылок вручную насчитали 38. Сканер нашёл ровно 38.
- Ссылок, которые передают вес чужим сайтам, вручную было 8. Сканер насчитал 8.
- Программу-подсадчика сканер опознал и по адресу, и по содержимому: нашёл в ней те же 44 спрятанных блока, что и наши специалисты.
- По снимкам веб-архива сканер сам восстановил хронологию: весной и осенью 2024 года сайт чистый, в марте и августе 2026 года заражён.
Потом прогнали по восьми живым сайтам клиентов, которых мы раньше лечили после взлома. Скрытых ссылок и подмены нет ни на одном: вылеченные сайты остались чистыми. Зато снаружи нашлись три забытых «хвоста», о которых владельцы не знали: живая тестовая копия сайта, открытая для поисковиков; запись в настройках домена, которая ведёт в никуда, и её может перехватить кто угодно; ядро Битрикса 2022–2023 годов на двух сайтах.
Своя защита приняла сканер за взломщика
Первый же осмотр нашего собственного сайта закончился баном на час. Защита la-chatte.com увидела запрос списка пользователей сайта и решила, что это подготовка к подбору паролей. Защита сработала правильно.
Для сервиса это важный урок: у клиента может стоять такая же защита. Теперь такие проверки идут с предупреждением, а если сайт перестал отвечать посреди осмотра, отчёт помечается «неполным» и тема становится серой, а не зелёной. Иначе владелец прочитал бы «ничего не найдено» там, где сканер просто не смог посмотреть.
Как мы боремся с ложными тревогами
Ложная тревога вредна не меньше пропущенного взлома: после третьей человек перестаёт читать отчёты. Поэтому в сканере несколько предохранителей.
- Контрольный повтор. Каждую страницу открываем дважды. Что меняется уже между двумя одинаковыми заходами (счётчики, виджеты, рекламные блоки), подменой не считается.
- Сверка со страницей «не найдено». Перед поиском забытых файлов запрашиваем заведомо несуществующий адрес. Многие сайты на любой адрес отвечают «всё хорошо» и показывают главную. Без этой сверки каждый такой сайт выглядел бы как склад забытых архивов.
- Белый список знакомых сервисов. 1 октября сканер поднял тревогу на сайте, где пришедшим из поиска показывалась реклама Яндекса, а остальным нет. В тот же день поймали вторую: прозрачные кнопки Telegram и VK для анимации сканер принял за скрытые ссылки. Обе ошибки исправили. Но если среди спрятанных ссылок есть хоть одна незнакомая, считаются все: в настоящей вставке на сайте клиента среди казино была и ссылка на Telegram.
Уровень 2. Проверка изнутри: то, что снаружи не видно
Осмотр снаружи видит только то, что сайт отдаёт по адресам. У того самого клиента главные закладки лежали в старой копии сайта на сервере. Ни один адрес её не открывал, снаружи она была невидима. Такое находит только проверка файлов.
Поэтому второй уровень читает файлы сайта по доступу «только чтение», который владелец выдаёт сам. Сканер ничего не записывает и не исправляет. Он ищет пять признаков взлома:
- программный код в папке для картинок и документов, где его быть не должно;
- опасные приёмы в коде: выполнение зашифрованных кусков, выполнение команд прямо из адресной строки, метки известных программ для управления чужим сайтом;
- подмену служебных файлов, через которые закладку запускают при каждом открытии сайта;
- код, спрятанный в файлах, которые выглядят как картинки;
- файлы, изменённые за последние две недели: если вы их не трогали, стоит разобраться.
Каждая находка второго уровня помечена как «подозрение», а не как приговор. Разбирать её должен человек: иногда странный код оказывается частью обычного плагина.

Уровень 3. Глубокая проверка: только по договору
Есть инструменты, которые атакуют сайт по-настоящему: пробуют взломать, как это сделал бы злоумышленник. На живом сайте такая проверка может натворить бед: создать мусорные заказы в 1С, разослать письма клиентам, уронить сайт. Поэтому кнопки «запустить глубокую проверку» в «Мышелове» нет и не будет.
Путь такой: клиент читает документ о рисках, подтверждает права на сайт, подписывает договор, где записано, что можно трогать и в какое время. После этого наш менеджер вручную включает опцию. Проверка идёт на отдельной копии сайта, а не на рабочем сайте, и ведёт её человек, который может остановить её в любой момент. Несанкционированный доступ к чужой информации преследуется по статье 272 Уголовного кодекса, и мы держим это в голове на каждом шаге.
Кабинет: чтобы сервисом пользовались без нас
7 и 8 октября собрали всё, что превращает сканер в сервис.
- Вход без пароля. Человек вводит почту и получает разовый код. До отправки адрес проверяется на опечатки и одноразовые ящики. Для ботов на форме стоит невидимая ловушка: кто её заполнил, получает бан на неделю.
- Подтверждение прав на сайт. Три способа: код на почту с адресом домена, файл в корне сайта или запись в настройках домена. Без этого проверка не начнётся: чужие сайты мы не проверяем.
- Отчёт. Оценка защищённости от 0 до 100 и буквой, находки сгруппированы по темам, у каждой цвет срочности. Отчёт можно распечатать в PDF и передать разработчику.
- Мониторинг. Повторный осмотр по расписанию. Письмо приходит, только когда появилось что-то новое, а не каждую неделю «всё хорошо».
- Деньги. Баланс, счёт для юрлиц, промокоды, партнёрская программа. Отдельный раздел для менеджера: счета, выплаты, список пользователей.

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

Как шла работа по дням
| Дата | Что сделали |
|---|---|
| 26–27 сентября | Проверили свой сайт чужим сканером, записали каждый его запрос, разобрали отчёт |
| 30 сентября | Собрали осмотр снаружи. Проверили на сайте после взлома (38 из 38) и на восьми сайтах клиентов |
| 1 октября | Поймали и исправили две ложные тревоги |
| 4 октября | Разобрали рынок сканеров, описали, чего в них не хватает |
| 7 октября | Кабинет, подтверждение прав на сайт, проверка изнутри |
| 8 октября | Имя «Мышелов», сайт, вход по коду, письма, отчёты, оплата, юридические документы |
| 9 октября | Заголовки страниц под поисковые запросы, Яндекс.Метрика |
Что получилось
- Работающий сервис skaner.la-chatte.com с кабинетом, отчётами и мониторингом.
- Осмотр снаружи за пару минут и около 200 запросов вместо полусуток и 12 692 запросов. Только чтение.
- Сканер поймал 38 из 38 скрытых ссылок на настоящем взломанном сайте и совпал с ручной проверкой по всем ключевым признакам.
- Проверка файлов изнутри: находит закладки, которых снаружи не видно.
- Глубокая проверка с человеком и договором вместо кнопки, которая может уронить чужой сайт.
- Цены: осмотр снаружи бесплатно, проверка изнутри 490 ₽, мониторинг 290 ₽ за 30 дней.
Для нас сканер стал ещё и рабочим инструментом. Осмотр снаружи стал первой ступенью нашего аудита безопасности, а его быстрые проверки работают в охране сайта. Человек начинает разбор не с нуля, а со списка находок.
Что это значит для вашего сайта
Большинство взломов, которые мы видели, начинались не с хитрой атаки, а с забытой мелочи: старая копия сайта, архив в открытой папке, плагин, который не обновляли три года. Всё это видно за две минуты, если знать, куда смотреть.
Если хотите проверить сайт сами, начните с бесплатного осмотра в «Мышелове». Если сайт уже взломали, не тратьте время на сканеры: смотрите, как мы восстанавливаем сайты после взлома, и примеры: магазин «Стандарт» вернули за день, «За Победу» вылечили дважды.
Для технических специалистов
- Язык и каркас: Python, FastAPI, шаблоны Jinja2 и HTMX, Uvicorn за nginx, сертификат Let’s Encrypt с автопродлением. Ограничение частоты запросов на входе, регистрации и подтверждении.
- Изоляция проверок. Веб-часть только ставит задачу. Проверку выполняет отдельный процесс-воркер: каждый скан в своём дочернем процессе с жёстким таймаутом (5 минут), без оболочки, под отдельным пользователем без прав.
- Осмотр снаружи: только GET и HEAD, свой понятный User-Agent, пауза 0,4 с между запросами к одному хосту, бюджет 230 с. Что не успели, помечается «не проверено», а не «чисто».
- Конвейер: распознаём движок (WordPress, 1С-Битрикс, Joomla, OpenCart, Tilda, самописный) → общие проверки для любого сайта → пакет проверок под движок. Новый движок добавляется без переделки ядра.
- Открытые источники: база уязвимостей WPVulnerability (сводит CVE, Wordfence, WPScan, Patchstack), журналы сертификатов crt.sh и Cert Spotter для поддоменов, DNS-over-HTTPS для SPF, DMARC и DKIM, веб-архив для истории, отчёт Google о прозрачности для репутации.
- Проверка изнутри: только стандартная библиотека Python, файлы открываются только на чтение, без перехода по символическим ссылкам, без сети и без выполнения найденного кода, файлы больше 2 МБ пропускаются. Каждый модуль покрыт открытыми и скрытыми тестами.
- Формат находки единый для всех уровней: что, где, доказательство (с маскировкой чужих доменов, почт и телефонов), чем грозит, как закрыть, кому передать.

Проверим ваш сайт
Пришлите адрес сайта. Скажем, что видно снаружи и с чего начать, если что-то не так.
Если мы не подходим, так и скажем. Свяжемся так, как вы выбрали. Пн–Вс 8–21 по НСК.