Почему заявка уходит конкуренту через 10 минут. Пять дыр, которые нашёл за один день без взлома
Региональная строительная компания: живой Яндекс.Директ, стабильный трафик. Владелец уверен, что заявки копируют конкуренты. Я провёл публичный аудит по открытым данным, только браузер и DevTools, без серверных доступов. Нашёл пять уязвимостей, любая из которых сливает лиды на сторону. Закрыть их можно за 2–3 недели, и коробка за 400–600 тысяч рублей для этого не нужна.
Откуда берётся «заявка приходит и конкурентам»
Там, где лид (одна заявка от потенциального клиента) стоит дорого, история повторяется из ниши в нишу: фундаменты, окна ПВХ, юридические услуги, медицина. Клиент оставил заявку, менеджер перезвонил через 20 минут, а клиент в ответ говорит, что вы уже третий, кто позвонил. Рынок продаёт защиту от парсеров (программ, которые сами собирают данные с сайтов) коробкой за 400–600 тысяч рублей. Часть таких продуктов работает. Часть затыкает совсем не тот канал, по которому уходят заявки.
Сначала надо понять, через что именно течёт, и для этого делают аудит. Для первичной диагностики хватает открытых данных, тех, что сервер сам отдаёт любому посетителю.
Пять дыр без единого взлома, только DevTools
Аудит занял один рабочий день. Из инструментов — встроенная панель разработчика в Chrome (DevTools), публичные базы известных уязвимостей CVE и Я.Метрика на демо-аккаунте для проверки. Вот что нашлось.
-
1. Нет ни одного security-заголовка
Заголовки безопасности (CSP, HSTS, X-Frame-Options, Referrer-Policy — команды, которыми сервер ограничивает чужой код на странице) отсутствуют все до одного. Любое расширение браузера у клиента, от купонатора до антивирусного плагина, спокойно читает и переписывает форму прямо у него на экране. Лечится правкой конфига nginx за час. -
2. Яндекс.Метрика пишет вводимые телефоны
Вебвизор (запись действий посетителя: куда водил мышкой, что нажимал и что печатал) включён настройкой webvisor: true, поля форм из записи не исключены. Любой подрядчик с доступом к кабинету Метрики видит вводимые номера прямо в записях сессий, в реальном времени. Утечка при этом полностью легальная, через собственный инструмент аналитики. Закрывается одной строкой в коде счётчика или галочкой в кабинете. -
3. Один CSRF-токен на все формы, без ротации
На сайте четыре формы захвата лидов. У всех один и тот же CSRF-токен (разовый код, который должен подтверждать, что заявку шлёт живой человек со страницы, а не чужой скрипт), и он не меняется между отправками. Обойти такую защиту автоматом любой скрипт сможет за пять минут. -
4. jQuery версии 1.12.4, релиз 2016 года
У этой версии есть публично описанные XSS-дыры (CVE-2015-9251, CVE-2019-11358 и другие), когда злоумышленник подсовывает на страницу свой код. Библиотеку не обновляли восемь лет. Вместе с отсутствующим CSP-заголовком такая атака собирается на коленке. -
5. Шесть параллельных незакрытых копий сайта
Поддиректории /new, /novosibirsk, /zakaz, /zakaz2 и ещё две живут своей жизнью: индексируются Яндексом, содержат рабочие формы. Каждая копия дублирует лиды или добавляет ещё одну точку утечки. Заодно копии воюют между собой в поиске и съедают лимит на обход страниц от Яндекса.
400–600к за коробку или 140–240к за реальное закрытие
Антипарсерное решение на рынке стоит от 400 до 600 тысяч рублей. Чаще всего оно затыкает один канал: сбор данных через открытый API или перебор формы. А когда заявки утекают через Метрику или расширения в браузере клиента, такая коробка просто ни при чём.
Закрыть найденные пять дыр при базовой гигиене стоит 140–240к ₽. В работу входят security-заголовки на nginx, настройка вебвизора, обновление зависимостей, ревизия доступов к Метрике и закрытие дублей. Уложиться можно в 2–3 недели, и переписывать сайт с нуля для этого не надо.
Три шага для самостоятельной проверки своего сайта
Сайт с формой захвата лидов и дорогим трафиком из Директа? Проверьте эти три точки сами, минут за 30.
- Шаг 1. Security-заголовки. Откройте securityheaders.com, введите адрес сайта. Оценка ниже B означает, что критических заголовков нет.
- Шаг 2. Метрика. Войдите в кабинет Метрики, откройте «Вебвизор» с записями посетителей. С другого устройства введите телефон в форму на своём сайте и посмотрите, виден ли он в записи. Если виден, это поле надо исключить из захвата.
- Шаг 3. Аудит доступов. Зайдите в настройки кабинета Метрики, откройте список пользователей с доступом. Больше трёх человек, а последняя ревизия была больше полугода назад? Самое время пересмотреть, кому он реально нужен.
Результат вас насторожил? Я провожу экспресс-аудит по открытым данным. Готовые кейсы лежат в разделе Проекты, а нестандартную задачу можно обсудить через форму обратной связи.
Узнайте, откуда уходят ваши заявки
Экспресс-аудит по открытым данным делается за один день, без доступов к серверу и без NDA. Подойдёт любому сайту с формой захвата лидов и бюджетом в Директе от 30к ₽/мес.
Обсудить аудит →