Перейти к содержимому
Tutorial

Обнаруживайте парсеры AI с помощью отпечатков пальцев TLS, а не пользовательских агентов

| 6 min read

GPTBot, ClaudeBot и PerplexityBot теперь подделывают пользовательские агенты Chrome в более чем 30% запросов. Снятие отпечатков пальцев JA4 TLS улавливает их при рукопожатии еще до того, как ваш источник даже анализирует заголовки.

Network cables representing TLS handshakes and bot fingerprinting at the edge
Photo by Thomas Jensen on Unsplash

Ваш robots.txt говорит User-agent: GPTBot Disallow: /. GPTBot это уважает. Дюжина трубопроводов RAG, построенных на вершине requests, httpx, а безголовый Chrome со строкой Mozilla/5.0 в заголовках — нет. Недавние выборки трафика от крупных издателей показывают, что от 30 до 60% обращений Chrome происходят из стеков TLS, не связанных с браузером. Пользовательский агент — это театр; Клиент TLS Hello — это правда.

JA4, формат отпечатков пальцев TLS, опубликованный FoxIO в 2023 году, хэширует части Client Hello, которые клиент не может легко изменить, не разветвляя свою библиотеку TLS: порядок шифрования, расширения, ALPN, алгоритмы подписи. Настоящий Chrome и Python httpx скрипт имеет совершенно разные отпечатки пальцев, независимо от того, что он пишет в заголовке User-Agent. В этом посте показано, как читать JA4 на краю, классифицировать его по /v1/tls/fingerprintи примите меры до того, как запрос достигнет источника.

Как выглядит JA4

JA4 состоит из трех разделов, соединенных подчеркиванием. В первом разделе кодируется версия TLS, ALPN и количество шифров. Второй хэширует наборы шифров. Третий — расширения хэшей и алгоритмы подписи. Типичный отпечаток Chrome 124:

t13d1516h2_8daaf6152771_e5627efa2ab1

Питон httpx 0.27 клиент:

t13d1517h2_8daaf6152771_b1ff8ab2d16f

Тот же TLS 1.3, тот же ALPN h2, аналогичный хэш шифра, но хэш расширения отличается, потому что httpx согласовывает другой порядок расширения от BoringSSL. Этот третий раздел — дискриминатор, который ловит парсеры, выдающие себя за Chrome.

Классифицировать отпечаток пальца

Отправьте JA4 в /v1/tls/fingerprint и получите идентификационные данные клиента, вердикт и оценку доверия. Конечная точка поддерживает корпус отпечатков пальцев, индексированный по клиентской библиотеке и диапазону версий.

Пример ответа для Python httpx JA4 выше:

The verdict Поле — единственная часть, с которой вам нужно действовать на краю. browser_match — это логический ярлык для «является ли это какой-либо известной реальной версией браузера» и является полезным знаменателем для мониторинга.

Cloudflare Worker, 30 строк

Cloudflare предоставляет доступ к JA4 request.cf.ja4 для любой зоны с включенным снятием отпечатков TLS (бесплатно в плане Pro, доступно через заголовки Workers на бесплатном уровне с tls_client_hello запрос). Кэшируйте вердикт на час, поскольку отпечатки пальцев стабильны, пока не обновится клиентская библиотека.

Кэш поддерживает частоту вызовов API, пропорциональную уникальным отпечаткам пальцев, а не объему запросов. Типичный сайт видит менее 5000 отдельных JA4 в день, поэтому восходящий вызов в устойчивом состоянии встречается редко. Рабочие изоляты удаляют карту при холодном запуске, поэтому на практике кэш ограничен; для источников с высокой мощностью замените на caches.default с TTL 1 час.

В Экспрессе то же самое

Если ваш CDN пересылает JA4 в заголовке (Fastly's fastly-tls-ja4, Клаудфлер cf-ja4или свой собственный от вышестоящего Worker), обработчик происхождения представляет собой тонкое промежуточное программное обеспечение.

Решите действия для каждого приговора

Три пути реагирования охватывают большинство случаев. Не блокируйте неизвестную корзину; вы будете сжигать реальных пользователей на новых версиях браузеров.

Код статуса 402 введен намеренно. Он указывает операторам скреперов на /api за лицензирование, а не сообщать им, что они заблокированы, и именно это попадает в список «издателей, враждебно настроенных по отношению к ИИ». Дружественная версия дает вам случайного клиента API вместо нагромождения Twitter.

Измерьте влияние

Before flipping any block, log JA4 plus User-Agent for a week. Важная диаграмма - это «доля запросов, в которых User-Agent требует Chrome, а JA4 говорит о скрапере». Большинство команд видят от 15 до 40%. Это число и будет вашим радиусом поражения, если вы отправляете черный список только для User-Agent. После включения шлюзования на основе JA4 тот же график должен показать, что доля упала до однозначных цифр в течение нескольких часов.

Уровень бесплатного пользования botoi охватывает 1000 классификаций отпечатков пальцев в день (5 запросов в минуту). В сочетании с кешем этого достаточно для любого сайта малого и среднего размера. Возьмите ключ в botoi.com/api/signup.

Ссылка на конечную точку: API отпечатков пальцев TLS. Связанный: Наблюдение за API, когда агенты ИИ чаще всего обращаются к вам.

FAQ

Почему пользовательские агенты больше не работают?
Сканеры, обучающие ИИ, и их многочисленные имитаторы (настоящие боты, парсеры серого рынка, конвейеры RAG, созданные клиентами) все чаще отправляют «Mozilla/5.0 ... Chrome/120», потому что издатели добавили блоки robots.txt и User-Agent. Рукопожатие TLS устанавливается клиентской библиотекой (Go net/http, Python httpx, Node undici, headless Chrome), и его гораздо сложнее подделать, не переписывая клиент.
Что такое JA4?
JA4 — это формат отпечатков пальцев TLS Client Hello, опубликованный FoxIO в 2023 году. Он хеширует согласованную версию TLS, наборы шифров, расширения, ALPN и алгоритмы подписи в строку типа t13d1516h2_8daaf6152771_e5627efa2ab1. Два клиента, совместно использующие JA4, используют один и тот же стек TLS, независимо от того, что утверждает их заголовок User-Agent.
Будет ли это блокировать реальных пользователей?
Нет. В реальных Chrome, Safari и Firefox есть хорошо известные JA4, которые изменяются только при обновлении версии браузера. Конечная точка botoi помечает отпечатки пальцев, связанные с библиотеками очистки (curl, wget, Requests, httpx, Go default, Node undici, Headless Chrome с исправлениями для защиты от обнаружения). Вы разрешаете браузеру использовать отпечатки пальцев, а остальное оспариваете или ограничиваете.
Могут ли парсеры подделать JA4?
Да, с усилием. Такие инструменты, как Curl-impersonate и библиотека Python tls_client, могут имитировать Chrome JA4. Спуферы по-прежнему составляют небольшое меньшинство парсерского трафика в 2026 году, и как только идентификатор спуфера становится общедоступным, вы классифицируете его как любой другой отпечаток пальца. JA4 повышает стоимость одного HTTP-заголовка до разветвленной библиотеки TLS; этой стоимости достаточно, чтобы сдержать «длинный хвост».
Как получить отпечаток пальца на краю?
Cloudflare предоставляет ja4 для объекта запроса через cf.botManagement и для рабочих через request.cf.tlsClientHelloLength плюс ja4. Быстро предоставляет его через fastly.tls. AWS CloudFront does not yet expose it directly; маршрутизируйте через CF Worker или используйте конечную точку botoi /v1/tls/fingerprint с необработанным клиентским Hello.

Начните разработку с botoi

150+ API-эндпоинтов для поиска, обработки текста, генерации изображений и утилит для разработчиков. Бесплатный тариф, без банковской карты.