Détectez les scrapers IA avec des empreintes digitales TLS, pas des agents utilisateurs
GPTBot, ClaudeBot et PerplexityBot usurpent désormais les agents utilisateurs de Chrome dans plus de 30 % des requêtes. Les empreintes digitales JA4 TLS les détectent lors de la poignée de main, avant même que votre origine n'analyse les en-têtes.
Votre robots.txt dit User-agent: GPTBot Disallow: /. GPTBot l'honore. La douzaine de pipelines RAG construits au-dessus de requests, httpx, et Chrome sans tête avec une chaîne Mozilla/5.0 dans les en-têtes ne le font pas. Des échantillons de trafic récents provenant de grands éditeurs montrent que 30 à 60 % des appels "Chrome" proviennent de piles TLS autres que celles d'un navigateur. Le User-Agent est un théâtre ; le client TLS Hello est la vérité.
JA4, le format d'empreinte digitale TLS FoxIO publié en 2023, hache les parties d'un Client Hello qu'un client ne peut pas facilement modifier sans bifurquer sa bibliothèque TLS : ordre de chiffrement, extensions, ALPN, algorithmes de signature. Du vrai Chrome et un Python httpx script ont des empreintes digitales qui ne se ressemblent en rien, peu importe ce que l'on écrit dans l'en-tête User-Agent. Cet article montre comment lire JA4 en bordure, le classer via /v1/tls/fingerprint, et agissez avant que la demande n'atteigne votre origine.
À quoi ressemble JA4
Un JA4 est constitué de trois sections reliées par des traits de soulignement. La première section code la version TLS, l'ALPN et le nombre de chiffres. Le deuxième hache les suites de chiffrement. Le troisième hache les extensions et les algorithmes de signature. Une empreinte digitale Chrome 124 typique :
t13d1516h2_8daaf6152771_e5627efa2ab1
Un Python httpx 0,27 client :
t13d1517h2_8daaf6152771_b1ff8ab2d16f
Même TLS 1.3, même ALPN h2, hachage de chiffrement similaire, mais le hachage d'extension diffère car httpx négocie une commande d'extension différente de BoringSSL. Cette troisième section est le discriminateur qui détecte les scrapers se faisant passer pour Chrome.
Classer une empreinte digitale
Envoyez le JA4 à /v1/tls/fingerprint et obtenez une identification du client, un verdict et un score de confiance. Le point de terminaison gère un corpus d’empreintes digitales indexé par bibliothèque client et plage de versions.
Exemple de réponse pour Python httpx JA4 ci-dessus :
La verdict le champ est le seul élément sur lequel vous devez agir en bordure. browser_match est le raccourci booléen pour "est-ce une version réelle connue du navigateur" et constitue un dénominateur utile pour la surveillance.
Cloudflare Worker, 30 lignes
Cloudflare expose JA4 sur request.cf.ja4 pour toute zone avec les empreintes digitales TLS activées (gratuit sur le plan Pro, disponible via les en-têtes Workers sur le niveau gratuit avec tls_client_hello demande). Mettez le verdict en cache pendant une heure, car les empreintes digitales sont stables jusqu'à ce qu'une bibliothèque client soit mise à jour.
Le cache maintient le taux d'appels de l'API proportionnel aux empreintes digitales uniques, et non au volume des demandes. Un site typique voit moins de 5 000 JA4 distincts par jour, de sorte que l'appel en amont est rare en régime permanent. Les travailleurs isolés expulsent la carte lors d'un démarrage à froid, de sorte que le cache est limité en pratique ; pour les origines à cardinalité élevée, passez à caches.default avec un TTL d'une heure.
Même chose en Express
Si votre CDN transmet le JA4 dans un en-tête (Fastly's fastly-tls-ja4, celui de Cloudflare cf-ja4, ou le vôtre à partir d'un Worker en amont), le gestionnaire d'origine est un middleware léger.
Décider des actions par verdict
Trois voies de réponse couvrent la plupart des cas. Ne bloquez pas le compartiment inconnu ; vous graverez de vrais utilisateurs sur les nouvelles versions du navigateur.
Le code d'état 402 est intentionnel. Il indique aux opérateurs de grattoirs /api pour une licence plutôt que de leur dire qu'ils sont bloqués, ce qui vous place sur une liste « d'éditeur hostile à l'IA ». La version conviviale vous permet d'obtenir un client API occasionnel au lieu d'un pile-on Twitter.
Mesurer l'impact
Avant de retourner un bloc, connectez-vous à JA4 plus User-Agent pendant une semaine. Le graphique qui compte est "la part des requêtes pour lesquelles l'agent utilisateur revendique Chrome mais JA4 dit scraper". La plupart des équipes voient 15 à 40 %. Ce numéro correspond à votre rayon d'explosion si vous envoyez une liste de blocage réservée aux agents utilisateurs. Après avoir activé le contrôle basé sur JA4, le même graphique devrait montrer que cette part chute à un chiffre en quelques heures.
Le niveau gratuit sur botoi couvre 1 000 classifications d’empreintes digitales par jour (rafale de 5 requêtes/min). Associé au cache, cela offre une marge suffisante pour tout site de petite ou moyenne taille. Prenez une clé à botoi.com/api/signup.
Référence du point final : API d'empreintes digitales TLS. En rapport: Observabilité de l'API lorsque les agents IA sont vos plus gros appelants.
FAQ
- Pourquoi les agents utilisateurs ne fonctionnent-ils plus ?
- Les robots d'exploration de l'IA et leurs nombreux imitateurs (vrais robots, grattoirs du marché gris, pipelines RAG construits par les clients) envoient de plus en plus "Mozilla/5.0 ... Chrome/120" parce que les éditeurs ont ajouté des blocs robots.txt et User-Agent. La poignée de main TLS est définie par la bibliothèque client (Go net/http, Python httpx, Node undici, headless Chrome) et est beaucoup plus difficile à simuler sans réécrire le client.
- Qu’est-ce que JA4 ?
- JA4 est un format d'empreinte digitale TLS Client Hello publié par FoxIO en 2023. Il hache la version TLS négociée, les suites de chiffrement, les extensions, l'ALPN et les algorithmes de signature dans une chaîne telle que t13d1516h2_8daaf6152771_e5627efa2ab1. Deux clients partageant un JA4 utilisent la même pile TLS, indépendamment de ce que prétend leur en-tête User-Agent.
- Est-ce que cela bloquera les vrais utilisateurs ?
- Non. Real Chrome, Safari et Firefox ont des JA4 bien connus qui changent uniquement en cas de changement de version du navigateur. Le point de terminaison botoi signale les empreintes digitales associées aux bibliothèques de scraping (curl, wget, requêtes, httpx, Go default, Node undici, headless Chrome avec correctifs anti-détection). Vous autorisez les empreintes digitales du navigateur et contestez ou limitez le reste.
- Les scrapers peuvent-ils usurper JA4 ?
- Oui, avec effort. Des outils tels que curl-impersonate et la bibliothèque Python tls_client peuvent imiter Chrome JA4. Les usurpateurs représentent encore une petite minorité du trafic de scraper en 2026, et une fois qu'un identifiant d'usurpateur devient public, vous le classez comme n'importe quelle autre empreinte digitale. JA4 augmente le coût d'un en-tête HTTP à une bibliothèque TLS forkée ; ce coût est suffisant pour dissuader la longue traîne.
- Comment puis-je obtenir l'empreinte digitale sur le bord ?
- Cloudflare expose ja4 sur l'objet de requête via cf.botManagement et sur les Workers via request.cf.tlsClientHelloLength plus ja4. L'expose rapidement via fastly.tls. AWS CloudFront ne l'expose pas encore directement ; acheminez via un CF Worker ou utilisez le point de terminaison botoi /v1/tls/fingerprint avec le Client Hello brut.
Commencez a construire avec botoi
150+ endpoints API pour la recherche, le traitement de texte, la generation d'images et les utilitaires pour developpeurs. Offre gratuite, sans carte bancaire.