Zum Inhalt springen
Tutorial

Erkennen Sie KI-Scraper mit TLS-Fingerabdrücken, nicht mit Benutzeragenten

| 6 min read

GPTBot, ClaudeBot und PerplexityBot fälschen jetzt Chrome-Benutzeragenten bei mehr als 30 % der Anfragen. JA4 TLS-Fingerprinting fängt sie beim Handshake ab, bevor Ihr Ursprung die Header überhaupt analysiert.

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

Ihre robots.txt sagt User-agent: GPTBot Disallow: /. GPTBot würdigt es. Das Dutzend darüber gebaute RAG-Pipelines requests, httpxund Headless Chrome mit einer Mozilla/5.0-Zeichenfolge in den Headern nicht. Aktuelle Traffic-Samples von großen Publishern zeigen, dass 30 bis 60 % der „Chrome“-Zugriffe von Nicht-Browser-TLS-Stacks stammen. Der User-Agent ist Theater; Der TLS-Client Hello ist die Wahrheit.

JA4, das 2023 von FoxIO veröffentlichte TLS-Fingerabdruckformat, hasht die Teile eines Clients. Hallo, ein Client kann nicht einfach geändert werden, ohne seine TLS-Bibliothek zu forken: Verschlüsselungsreihenfolge, Erweiterungen, ALPN, Signaturalgorithmen. Echtes Chrome und ein Python httpx Skripts haben Fingerabdrücke, die sich nicht ähneln, unabhängig davon, was einer der beiden in den User-Agent-Header schreibt. Dieser Beitrag zeigt, wie man JA4 am Rand liest und klassifiziert /v1/tls/fingerprintund ergreifen Sie Maßnahmen, bevor die Anfrage Ihren Ursprung erreicht.

Wie JA4 aussieht

Ein JA4 besteht aus drei Abschnitten, die durch Unterstriche verbunden sind. Der erste Abschnitt kodiert die TLS-Version, ALPN und die Anzahl der Verschlüsselungen. Die zweiten Hash-Verschlüsselungssammlungen. Der dritte hasht Erweiterungen und Signaturalgorithmen. Ein typischer Chrome 124-Fingerabdruck:

t13d1516h2_8daaf6152771_e5627efa2ab1

Ein Python httpx 0,27 Kunde:

t13d1517h2_8daaf6152771_b1ff8ab2d16f

Gleiches TLS 1.3, gleiches ALPN h2, ähnlicher Chiffre-Hash, aber der Erweiterungs-Hash unterscheidet sich, weil httpx handelt eine andere Erweiterungsreihenfolge als BoringSSL aus. Dieser dritte Abschnitt ist der Diskriminator, der Scraper fängt, die vorgeben, Chrome zu sein.

Klassifizieren Sie einen Fingerabdruck

Senden Sie den JA4 an /v1/tls/fingerprint und erhalten Sie eine Kundenidentifikation, ein Urteil und einen Vertrauenswert zurück. Der Endpunkt verwaltet einen Fingerabdruckkorpus, der nach Clientbibliothek und Versionsbereich indiziert ist.

Beispielantwort für Python httpx JA4 oben:

Der verdict Das Feld ist das einzige Teil, auf das Sie am Rand einwirken müssen. browser_match ist die boolesche Abkürzung für „Ist das eine bekannte echte Browserversion“ und ein nützlicher Nenner für die Überwachung.

Cloudflare Worker, 30 Zeilen

Cloudflare macht JA4 verfügbar request.cf.ja4 für jede Zone mit aktiviertem TLS-Fingerprinting (kostenlos im Pro-Plan, verfügbar über Workers-Header im kostenlosen Tarif mit tls_client_hello Anfrage). Zwischenspeichern Sie das Urteil eine Stunde lang, da Fingerabdrücke stabil sind, bis eine Client-Bibliothek aktualisiert wird.

Der Cache hält die API-Aufrufrate proportional zu den eindeutigen Fingerabdrücken und nicht zum Anforderungsvolumen. Ein typischer Standort sieht weniger als 5.000 verschiedene JA4 pro Tag, daher ist der Upstream-Aufruf im stabilen Zustand selten. Arbeiter isolieren die Karte beim Kaltstart, sodass der Cache in der Praxis begrenzt ist. für Ursprünge mit hoher Kardinalität wechseln Sie zu caches.default mit einer 1-stündigen TTL.

Das Gleiche gilt für Express

Wenn Ihr CDN den JA4 in einem Header weiterleitet (Fastlys fastly-tls-ja4, Cloudflares cf-ja4, oder Ihr eigenes von einem Worker-Upstream), ist der Ursprungshandler eine dünne Middleware.

Entscheiden Sie über Maßnahmen pro Urteil

Drei Antwortpfade decken die meisten Fälle ab. Blockieren Sie nicht den unbekannten Bucket; Sie werden echte Benutzer mit neuartigen Browserversionen fesseln.

Der Statuscode 402 ist beabsichtigt. Es weist Scraper-Betreiber darauf hin /api für die Lizenzierung, anstatt ihnen mitzuteilen, dass sie gesperrt sind, was dazu führt, dass Sie auf die Liste der „Verlage, die KI gegenüber feindlich eingestellt sind“ gelangen. Die benutzerfreundliche Version bringt Ihnen gelegentlich API-Kunden ein, anstatt sich auf Twitter anzuhäufen.

Messen Sie die Wirkung

Bevor Sie einen Block umdrehen, protokollieren Sie JA4 plus User-Agent eine Woche lang. Das Diagramm, das zählt, ist „Anteil der Anfragen, bei denen User-Agent Chrome beansprucht, JA4 jedoch Scraper“ sagt. Die meisten Teams sehen 15 bis 40 %. Diese Zahl ist Ihr Explosionsradius, wenn Sie eine Blockliste nur für den User-Agent versenden. Nach der Aktivierung des JA4-basierten Gatings sollte dasselbe Diagramm zeigen, dass dieser Anteil innerhalb weniger Stunden auf einstellige Werte sinkt.

Das kostenlose Kontingent für Botoi umfasst 1.000 Fingerabdruckklassifizierungen pro Tag (5 Anforderungen/Min.-Burst). In Kombination mit dem Cache ist das ausreichend Spielraum für jede kleine bis mittelgroße Website. Schnappen Sie sich einen Schlüssel bei botoi.com/api/signup.

Endpunktreferenz: TLS-Fingerabdruck-API. Verwandt: API-Beobachtbarkeit, wenn KI-Agenten Ihre häufigsten Anrufer sind.

FAQ

Warum funktionieren Benutzeragenten nicht mehr?
KI-Trainingscrawler und ihre vielen Nachahmer (echte Bots, Graumarkt-Scraper, vom Kunden erstellte RAG-Pipelines) senden zunehmend „Mozilla/5.0 ... Chrome/120“, weil Herausgeber robots.txt- und User-Agent-Blöcke hinzugefügt haben. Der TLS-Handshake wird von der Client-Bibliothek festgelegt (Go net/http, Python httpx, Node undici, Headless Chrome) und ist viel schwieriger zu fälschen, ohne den Client neu zu schreiben.
Was ist JA4?
JA4 ist ein TLS-Client-Hello-Fingerabdruckformat, das 2023 von FoxIO veröffentlicht wurde. Es hasht die ausgehandelte TLS-Version, Cipher Suites, Erweiterungen, ALPN und Signaturalgorithmen in einer Zeichenfolge wie t13d1516h2_8daaf6152771_e5627efa2ab1. Zwei Clients, die sich ein JA4 teilen, verwenden denselben TLS-Stack, unabhängig davon, was ihr User-Agent-Header behauptet.
Werden dadurch echte Benutzer blockiert?
Nein. Real Chrome, Safari und Firefox verfügen über bekannte JA4s, die sich nur bei Browserversionsänderungen ändern. Der Botoi-Endpunkt markiert Fingerabdrücke im Zusammenhang mit Scraping-Bibliotheken (Curl, Wget, Requests, httpx, Go default, Node Undici, Headless Chrome mit Anti-Erkennungs-Patches). Sie lassen die Fingerabdrücke des Browsers zu und fordern den Rest heraus oder begrenzen die Rate.
Können Scraper JA4 fälschen?
Ja, mit Mühe. Tools wie „curl-impersonate“ und die Python-Bibliothek „tls_client“ können Chrome JA4 nachahmen. Spoofer stellen im Jahr 2026 immer noch eine kleine Minderheit im Scraper-Verkehr dar, und sobald eine Spoofer-ID öffentlich wird, klassifizieren Sie sie wie jeden anderen Fingerabdruck. JA4 erhöht die Kosten von einem HTTP-Header zu einer gespaltenen TLS-Bibliothek; Diese Kosten reichen aus, um den Long Tail abzuschrecken.
Wie erhalte ich den Fingerabdruck am Rand?
Cloudflare stellt ja4 für das Anforderungsobjekt über cf.botManagement und für Worker über request.cf.tlsClientHelloLength plus ja4 bereit. Fastly macht es über fastly.tls verfügbar. AWS CloudFront macht es noch nicht direkt verfügbar; Leiten Sie über einen CF-Worker weiter oder verwenden Sie den Endpunkt botoi /v1/tls/fingerprint mit dem unformatierten Client Hello.

Starte mit botoi zu entwickeln

150+ API-Endpunkte für Abfragen, Textverarbeitung, Bildgenerierung und Entwickler-Tools. Kostenloser Tarif, keine Kreditkarte nötig.