Detecte raspadores de IA com impressões digitais TLS, não com agentes de usuário
GPTBot, ClaudeBot e PerplexityBot agora falsificam agentes de usuário do Chrome em mais de 30% das solicitações. A impressão digital JA4 TLS os captura no aperto de mão, antes mesmo de sua origem analisar os cabeçalhos.
Seu robots.txt diz User-agent: GPTBot Disallow: /. GPTBot honra isso. A dúzia de pipelines RAG construídos sobre requests, httpx, e o Chrome headless com uma string Mozilla/5.0 nos cabeçalhos não. Recent traffic samples from large publishers show 30 to 60% of "Chrome" hits originate from non-browser TLS stacks. O User-Agent é um teatro; o Cliente TLS Olá é a verdade.
JA4, o formato de impressão digital TLS FoxIO publicado em 2023, faz hash das partes de um cliente Olá, um cliente não pode alterar facilmente sem bifurcar sua biblioteca TLS: ordem de cifra, extensões, ALPN, algoritmos de assinatura. Chrome real e um Python httpx script tem impressões digitais que não se parecem em nada, não importa o que qualquer um escreva no cabeçalho do User-Agent. Este post mostra como ler JA4 no limite, classificá-lo via /v1/tls/fingerprinte tome medidas antes que a solicitação chegue à sua origem.
Qual é a aparência do JA4
Um JA4 consiste em três seções unidas por sublinhados. A primeira seção codifica a versão TLS, ALPN e contagem de cifras. O segundo faz hash de conjuntos de criptografia. O terceiro hashes de extensões e algoritmos de assinatura. Uma impressão digital típica do Chrome 124:
t13d1516h2_8daaf6152771_e5627efa2ab1
Um Píton httpx 0,27 cliente:
t13d1517h2_8daaf6152771_b1ff8ab2d16f
Mesmo TLS 1.3, mesmo ALPN h2, hash de cifra semelhante, mas o hash de extensão é diferente porque httpx negocia um pedido de extensão diferente do BoringSSL. Essa terceira seção é o discriminador que detecta scrapers que fingem ser o Chrome.
Classificar uma impressão digital
Envie o JA4 para /v1/tls/fingerprint e receba de volta a identificação do cliente, um veredicto e uma pontuação de confiança. O endpoint mantém um corpus de impressão digital indexado por biblioteca de cliente e intervalo de versões.
Exemplo de resposta para Python httpx JA4 acima:
O verdict field é a única peça sobre a qual você precisa atuar na borda. browser_match é o atalho booleano para "esta é alguma versão real conhecida do navegador" e é um denominador útil para monitoramento.
Trabalhador Cloudflare, 30 linhas
Cloudflare expõe JA4 em request.cf.ja4 para qualquer zona com impressão digital TLS habilitada (gratuito no plano Pro, disponível por meio de cabeçalhos Workers no nível gratuito com tls_client_hello solicitar). Armazene o veredicto em cache por uma hora porque as impressões digitais permanecem estáveis até que uma biblioteca cliente seja atualizada.
O cache mantém a taxa de chamadas da API proporcional às impressões digitais exclusivas, e não ao volume de solicitações. Um site típico vê menos de 5.000 JA4s distintos por dia, portanto a chamada upstream é rara em estado estacionário. Os trabalhadores isolados despejam o mapa na inicialização a frio, de modo que o cache é limitado na prática; para origens de alta cardinalidade, troque para caches.default com um TTL de 1 hora.
A mesma coisa no Expresso
Se o seu CDN encaminhar o JA4 em um cabeçalho (Fastly's fastly-tls-ja4, Cloudflare cf-ja4, ou o seu próprio de um Worker upstream), o manipulador Origin é um middleware fino.
Decida ações por veredicto
Três caminhos de resposta cobrem a maioria dos casos. Não bloqueie o bucket desconhecido; você queimará usuários reais em novos lançamentos de navegadores.
O código de status 402 é intencional. Ele aponta os operadores do raspador para /api para licenciamento, em vez de dizer que eles estão bloqueados, que é o que o coloca na lista de "editores hostis à IA". A versão amigável leva você a um cliente ocasional de API, em vez de uma pilha no Twitter.
Meça o impacto
Antes de inverter qualquer bloco, registre o JA4 mais o User-Agent por uma semana. O gráfico que importa é "parcela de solicitações em que o User-Agent reivindica o Chrome, mas o JA4 diz scraper". A maioria das equipes vê 15 a 40%. Esse número é o seu raio de explosão se você enviar uma lista de bloqueio somente para User-Agent. Depois de ativar o gate baseado em JA4, o mesmo gráfico deve mostrar que a participação caiu para um dígito em poucas horas.
O nível gratuito no botoi cobre 1.000 classificações de impressões digitais por dia (5 req/min burst). Combinado com o cache, há espaço suficiente para qualquer site de pequeno a médio porte. Pegue uma chave em botoi.com/api/signup.
Referência de ponto final: API de impressão digital TLS. Relacionado: Observabilidade da API quando os agentes de IA são seus chamadores mais frequentes.
FAQ
- Por que os agentes de usuário não funcionam mais?
- Os rastreadores de treinamento de IA e seus muitos imitadores (bots reais, scrapers do mercado cinza, pipelines RAG criados pelo cliente) enviam cada vez mais "Mozilla/5.0 ... Chrome/120" porque os editores adicionaram blocos robots.txt e User-Agent. O handshake TLS é definido pela biblioteca do cliente (Go net/http, Python httpx, Node undici, headless Chrome) e é muito mais difícil de falsificar sem reescrever o cliente.
- O que é JA4?
- JA4 é um formato de impressão digital TLS Client Hello publicado pela FoxIO em 2023. Ele faz o hash da versão TLS negociada, conjuntos de criptografia, extensões, ALPN e algoritmos de assinatura em uma string como t13d1516h2_8daaf6152771_e5627efa2ab1. Dois clientes que compartilham um JA4 estão usando a mesma pilha TLS, independentemente do que o cabeçalho User-Agent afirma.
- Isso bloqueará usuários reais?
- O Real Chrome, Safari e Firefox têm JA4s bem conhecidos que mudam apenas em caso de alterações na versão do navegador. O endpoint botoi sinaliza impressões digitais associadas a bibliotecas de raspagem (curl, wget, requests, httpx, Go default, Node undici, Headless Chrome com patches anti-detecção). Você permite as impressões digitais do navegador e desafia ou limita a taxa do resto.
- Os raspadores podem falsificar o JA4?
- Sim, com esforço. Ferramentas como curl-impersonate e a biblioteca Python tls_client podem imitar o Chrome JA4. Os falsificadores ainda são uma pequena minoria do tráfego de raspadores em 2026 e, uma vez que o ID do falsificador se torna público, você o classifica como qualquer outra impressão digital. JA4 raises the cost from one HTTP header to a forked TLS library; esse custo é suficiente para deter a cauda longa.
- Como faço para obter a impressão digital na borda?
- A Cloudflare expõe o ja4 no objeto de solicitação por meio de cf.botManagement e nos trabalhadores por meio de request.cf.tlsClientHelloLength mais ja4. Expõe-lo rapidamente via fastly.tls. O AWS CloudFront ainda não o expõe diretamente; rotear através de um CF Worker ou usar o endpoint botoi /v1/tls/fingerprint com o Client Hello bruto.
Comece a construir com botoi
150+ endpoints de API para consultas, processamento de texto, geração de imagens e utilitários para desenvolvedores. Plano gratuito, sem cartão de crédito.