Стриминговый сервис с каталогом на 40 тысяч единиц контента столкнулся с неожиданной проблемой: исходящий трафик origin вырос на 70% за две недели, а количество активных сессий в аналитике не изменилось. Никаких всплесков в маркетинге, никаких вирусных релизов. При этом нагрузка на API-слой росла каждую ночь, стабильно с 02:00 до 05:00 по московскому времени. Разбор логов показал, что кто-то методично выкачивает метаданные каталога через тот же endpoint, который использует официальное мобильное приложение.
Как скрейперы мимикрировали под мобильное приложение и что это дало
Первое, что сбило с толку: запросы приходили с валидными User-Agent мобильного клиента, корректными заголовками Accept-Language и даже с правдоподобными идентификаторами устройства. Классические сигнатуры ботов, по которым обычно срабатывает WAF, не находили ничего. Никаких headless-браузеров, никаких известных диапазонов дата-центров. IP-адреса распределялись по десяткам тысяч мобильных операторов, включая российских, что дополнительно усложняло GeoIP-фильтрацию: отсечь по географии означало заблокировать реальных зрителей.
Атака строилась на переборе API каталога. Скрейперы запрашивали список видео постранично, с корректной пагинацией, но с интервалом, который не выглядел аномальным на уровне отдельного IP. Один запрос в 3-5 секунд с каждого адреса. Проблема в том, что адресов были десятки тысяч. В сумме это давало до 12 тысяч запросов в минуту только на чтение метаданных. Origin отвечал кэшем на 30 секунд, но промахи кэша при таком разнообразии параметров запроса достигали 40%.
Ключевая деталь: скрейперы не скачивали видеофайлы. Они выкачивали каталог целиком, включая описания, теги, рейтинги, длительность, ссылки на превью. Такой датасет сам по себе имеет ценность для конкурентов, агрегаторов и сервисов рекомендаций. Нагрузка на origin росла не из-за трафика видео, а из-за метаданных, которые сервис считал второстепенными. В пиковые ночи доля API-запросов от скрейперов доходила до 65% от общего числа обращений к бэкенду.
Почему стандартные методы не сработали
Rate-limit по IP оказался бесполезен: при 50 тысячах адресов ограничение в 60 запросов в минуту на адрес не срезало и 5% паразитного трафика. CAPTCHA на API-эндпоинтах мобильного приложения ломала бы пользовательский опыт, потому что реальные зрители тоже ходят в каталог через те же методы. Блокировка по User-Agent дала бы ноль, потому что скрейперы использовали ровно ту же строку, что и официальный клиент. WAF-блокировки на основе сигнатур не находили ничего похожего на известные инструменты скрейпинга.
GeoIP-фильтрация, которую иногда предлагают как быстрое решение, в этом кейсе была опасна: 30% реальной аудитории сервиса находилось за пределами РФ, и отсечение зарубежных адресов убило бы легальный трафик. Оставалось искать решение на уровне логики приложения, а не сетевого периметра.
HMAC-подпись запроса и rate-limit по устройству: архитектура решения
Инженерная команда пошла от обратного: раз скрейперы идеально имитируют мобильное приложение, значит, нужно проверять то, что имитировать сложно. Мобильный клиент при каждом запросе к API формирует HMAC-подпись на основе секретного ключа, который зашит в приложение и уникален для каждой установки. cloudflare в россии 2026 offers additional context worth reviewing. Подпись включает метод, путь, тело запроса, временную метку и идентификатор устройства. Сервер проверяет подпись до того, как запрос попадает в бизнес-логику.
Скрейперы, которые просто копировали заголовки, не могли сгенерировать валидную подпись без извлечения ключа из APK. Это не невозможно, но требует reverse engineering каждой версии приложения, а ключ ротируется раз в 30 дней. Порог входа вырос настолько, что экономическая целесообразность скрейпинга для мелких игроков исчезла. Крупные, скорее всего, продолжат попытки, но их стоимость выросла на порядок.
Второй слой: rate-limit не по IP, а по идентификатору устройства, который передается вместе с подписью. Устройство, которое делает больше 200 запросов к каталогу в час, получает прогрессивную задержку: первые 50 сверх лимита идут с задержкой 200 мс, следующие 100 с задержкой 1 секунда, дальше запросы отклоняются на 15 минут. Реальный зритель редко превышает 40-50 запросов в час, так как каталог подгружается пачками и кэшируется на клиенте.
Дополнительно ввели проверку целостности клиента: контрольную сумму ключевых модулей приложения, которая передается в заголовке. Если приложение модифицировано или запущено в эмуляторе, запросы к API помечаются как подозрительные и проходят через дополнительную проверку. Это не блокировка, а сигнал для системы скоринга.
| Метод защиты | Эффект на скрейперов | Влияние на реальных зрителей | Сложность внедрения |
|---|---|---|---|
| Rate-limit по IP | Низкий, обходится пулом адресов | Минимальное | Низкая |
| CAPTCHA на API | Средний, но обходится фермами | Высокое, ломает мобильный опыт | Средняя |
| HMAC-подпись запроса | Высокий, требует reverse engineering | Нулевое при корректной реализации | Высокая |
| Rate-limit по устройству | Высокий, сложно подделать в масштабе | Низкое, лимиты выше реального потребления | Средняя |
| GeoIP-фильтрация | Средний, обходится через прокси в РФ | Высокое, режет легальную аудиторию | Низкая |
Через три недели после внедрения нагрузка на origin упала на 60%. Количество запросов к API сократилось с 12 тысяч до 4,5 тысяч в минуту в ночные часы. Пиковые значения CPU на бэкенде снизились с 85% до 34%. При этом метрики реальных зрителей не изменились: время до первого кадра осталось на уровне 1,2 секунды, количество сессий не просело, конверсия из просмотра каталога в запуск видео выросла на 3% за счет того, что API перестал тормозить под паразитной нагрузкой.
Если ваш сервис работает на WordPress или Bitrix и вы замечаете похожую картину, когда нагрузка на origin растет без роста аудитории, стоит проверить, не выкачивают ли каталог через API. Российский аналог Cloudflare вроде TrafficVeil закрывает часть задач на уровне платформы: L7 DDoS, защита от ботов, GeoIP-фильтрация, reverse proxy и WAF-блокировки без тарификации ботов и атак. Но HMAC-подпись и rate-limit по устройству остаются задачей приложения. Комбинация платформенной защиты и логики на стороне клиента дает результат, который не воспроизводится ни одним из методов по отдельности. Зависимость от зарубежной инфраструктуры создает риски, и бизнес в России ищет альтернативу Cloudflare в 2026 году не только из-за ограничений доступа, но и из-за предсказуемости работы. TrafficVeil предлагает переход с Cloudflare, сохраняя работу сайтов на территории РФ и по всему миру.