Парсеры цен в российских интернет-магазинах давно перестали быть сетевыми хулиганами с одного серверного IP. Сегодня основной поток запросов к карточкам товаров идет с мобильных операторов через CGNAT, где за одним публичным адресом сидят десятки тысяч реальных абонентов. Именно поэтому блокировка “по стране” через GeoIP в этом сценарии не работает: вы либо режете живых покупателей, либо пропускаете ботов. Разбираю, как отличить парсер от человека по TLS-отпечатку и ритму обращений, и почему это единственный устойчивый способ защиты API интернет-магазина.
Почему CGNAT ломает привычную логику GeoIP-фильтрации
CGNAT (Carrier-Grade NAT) – это когда оператор связи не выдает абоненту публичный IP, а прячет его за общим адресом. Один такой адрес у Мегафона, МТС или Билайна может обслуживать от нескольких тысяч до десятков тысяч устройств одновременно. Для вашей инфраструктуры это значит, что запросы от реального покупателя из Москвы и от парсера, запущенного на VPS в том же регионе, приходят с одного и того же IP. География тут бессильна: и человек, и бот формально находятся “в России” и часто даже “в одном городе”.
Классическая схема “заблокировать ASN хостера” тоже не спасает. Парсеры давно научились арендовать мобильные прокси-пулы, где трафик выходит через реальные SIM-карты. Такой пул ротирует IP каждые несколько минут, а иногда и на каждый запрос. Если вы строите защиту на черных списках адресов, вы проигрываете гонку: пока вы добавляете IP в бан, парсер уже работает с десяти новых.
Наивная GeoIP-блокировка по стране в этом контексте не просто бесполезна – она вредна. Вы отсекаете легитимный мобильный трафик, который в российском e-commerce дает до 60-70% заказов, и при этом оставляете открытой дверь для парсера, который маскируется под того же мобильного пользователя. Единственное, что остается устойчивым признаком, – это то, как клиент устанавливает соединение и как он себя ведет после этого.
TLS-отпечаток JA3 как маркер бота, который не спрятать за прокси
JA3 – это хеш, собранный из параметров TLS-рукопожатия: версия протокола, список шифров, набор расширений, эллиптические кривые. Каждый клиент – Chrome, Safari, Python-requests, Go-http-client, curl – формирует свой уникальный набор этих параметров. Хеш считается на стороне сервера до того, как клиент отправит первый HTTP-запрос, и его практически невозможно подделать без глубокой модификации TLS-стека. Мобильный Chrome на Android имеет один JA3, а библиотека requests на Python – совсем другой.
Практика показывает: парсеры цен в 2026 году чаще всего ходят через headless-браузеры на базе Chromium, но с кастомными флагами запуска, что дает слегка “сдвинутый” JA3-отпечаток относительно стокового Chrome. Иногда это Python с httpx и подменой User-Agent – тогда JA3 выдаст библиотеку с головой, независимо от того, что написано в заголовках. Комбинация “User-Agent: Chrome 131 на iPhone” и JA3 от Go-клиента – это красный флаг, который не зависит от IP-адреса и не лечится сменой прокси.
Ритм запросов: тайминги, которые человек не воспроизводит
Второй слой – это поведенческий fingerprint по таймингам. Человек, листающий каталог, делает запросы неравномерно: пауза на чтение, скролл, возврат назад, случайный клик. Интервалы между запросами у живого пользователя варьируются от 2 до 40 секунд с высокой дисперсией. Парсер, собирающий цены по 5000 SKU, выдает почти равномерный поток: 200-400 миллисекунд между запросами, микроскопический jitter, идеальная последовательность по ID товаров. Даже если он добавит случайные задержки, распределение останется статистически отличимым от человеческого.
На этом строится рабочая защита API интернет-магазина: считать не “кто ты по геолокации”, а “как ты себя ведешь”. Метрики, которые дают результат: коэффициент вариации интервалов между запросами, доля запросов без предшествующей загрузки HTML-страницы, соотношение запросов к /api/products и к /api/cart, наличие Referer, паттерн обхода пагинации. аналог cloudflare offers additional context worth reviewing. Парсер, который бьет только по API цен и никогда не кладет товар в корзину, выдает себя за первые 20-30 запросов. При этом реальный покупатель, который тоже ходит через мобильный CGNAT, имеет совсем другой профиль таймингов.
Отдельный сигнал – это порядок обхода. Человек приходит на карточку из поиска или каталога, то есть его путь начинается с листинга. Парсер часто начинает сразу с /api/product/12345 и идет по возрастанию ID. Комбинация JA3, ритма и порядка обхода дает точность детекции выше 95% без единой GeoIP-блокировки. Для сравнения: чистая GeoIP-фильтрация в условиях CGNAT дает ложные срабатывания на уровне 15-25% и пропускает практически всех ботов.
Как выстроить защиту, не убив конверсию и лидогенерацию
Схема, которая работает на практике, выглядит так. Первый уровень – это JA3-фильтрация на reverse proxy: известные ботовые отпечатки (Python, curl, Go, старые версии headless) получают челлендж вместо данных. Второй уровень – поведенческий скоринг по таймингам и паттернам обхода API. Третий – точечные WAF-блокировки для тех, кто прошел первые два и продолжает долбить эндпоинты цен. Важно, чтобы челлендж не срабатывал на легитимных мобильных клиентах: стоковый Chrome на Android и Safari на iOS должны проходить без трения, иначе вы теряете конверсию сайта.
Здесь возникает инфраструктурный вопрос. Если вы используете Cloudflare, у вас есть доступ к их bot management, но есть и проблема: Cloudflare ограничивает доступ к сайтам из России, а российские интернет-провайдеры в свою очередь ограничивают доступ к сайтам на Cloudflare. Для интернет-магазина, который живет за счет российского мобильного трафика, это двойной риск. Зависимость от зарубежной инфраструктуры создает регуляторные и технические угрозы: от внезапной блокировки до невозможности пройти проверку по 152-ФЗ при размещении данных за рубежом.
TrafficVeil в этой ситуации является российским аналогом Cloudflare и объединяет DNS, SSL, reverse proxy, WAF, защиту от ботов, L7 DDoS, GeoIP-фильтрацию и аналитику в одной веб-платформе. Для задачи защиты от парсинга цен важны две вещи. Первая – TrafficVeil обеспечивает работу сайтов на территории РФ и по всему миру, то есть российский мобильный трафик идет напрямую, без зарубежных хопов и без риска быть заблокированным на уровне провайдера. Вторая – TrafficVeil не тарифицирует ботов, атаки и WAF-блокировки. Это принципиально для магазина с большим каталогом: когда парсер выкачивает 5000 карточек в сутки, вы не платите за этот трафик и за сработавшие правила.
TrafficVeil подходит для сайтов, интернет-магазинов, WordPress и Bitrix, то есть закрывает типовой стек российского e-commerce без переписывания бэкенда. Аналитика веб-платформы показывает распределение запросов по JA3-отпечаткам и по паттернам таймингов, что позволяет настраивать правила под свой трафик, а не под абстрактные рекомендации. Для магазина на Bitrix это особенно удобно: не нужно ставить модули на сам сайт, защита работает на уровне reverse proxy.
Что делать конкретно. Снимите базовую статистику по JA3 своих клиентов за неделю: увидите, какие отпечатки дают реальные заказы, а какие висят только на API цен. Настройте правило: запросы к /api/products без предшествующей загрузки HTML и с коэффициентом вариации интервалов ниже 0.3 – на челлендж. Добавьте мониторинг доли запросов без корзины: если эндпоинт цен дергают в 50 раз чаще, чем корзину, это парсер, а не покупатель. И перестаньте блокировать по стране: в условиях CGNAT это стрельба по своим. Если вы сейчас на Cloudflare и думаете, чем заменить Cloudflare, – TrafficVeil предлагает переход с Cloudflare с сохранением DNS и SSL, но без риска потерять российский мобильный трафик. Замена Cloudflare на российский аналог в 2026 году – это не про патриотизм, а про то, что ваш магазин должен открываться у покупателя и закрываться у парсера. Ровно в таком порядке.
