Langsung ke konten
Tutorial

Deteksi scraper AI dengan sidik jari TLS, bukan agen pengguna

| 6 min read

GPTBot, ClaudeBot, dan PerplexityBot kini memalsukan agen pengguna Chrome pada 30%+ permintaan. Sidik jari JA4 TLS menangkapnya saat jabat tangan, bahkan sebelum asal Anda menguraikan headernya.

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

Kata robots.txt Anda User-agent: GPTBot Disallow: /. GPTBot honors it. Selusin jaringan pipa RAG dibangun di atasnya requests, httpx, dan Chrome tanpa kepala dengan string Mozilla/5.0 di headernya tidak. Sampel lalu lintas terbaru dari penerbit besar menunjukkan 30 hingga 60% klik "Chrome" berasal dari tumpukan TLS non-browser. Agen-Pengguna adalah teater; Klien TLS Halo adalah kebenarannya.

JA4, format sidik jari TLS FoxIO yang diterbitkan pada tahun 2023, meng-hash bagian-bagian dari Klien Halo yang tidak dapat diubah dengan mudah oleh klien tanpa mem-forking perpustakaan TLS-nya: urutan sandi, ekstensi, ALPN, algoritma tanda tangan. Chrome asli dan Python httpx skrip memiliki sidik jari yang tidak mirip, tidak peduli apa pun yang ditulis di header Agen-Pengguna. Posting ini menunjukkan cara membaca JA4 di edge, mengklasifikasikannya melalui /v1/tls/fingerprint, dan ambil tindakan sebelum permintaan mencapai asal Anda.

Seperti apa JA4 itu

JA4 adalah tiga bagian yang digabungkan dengan garis bawah. Bagian pertama mengkodekan versi TLS, ALPN, dan jumlah sandi. Rangkaian sandi hash kedua. Yang ketiga adalah ekstensi hash dan algoritma tanda tangan. Sidik jari khas Chrome 124:

t13d1516h2_8daaf6152771_e5627efa2ab1

Seekor ular piton httpx 0,27 klien:

t13d1517h2_8daaf6152771_b1ff8ab2d16f

TLS 1.3 yang sama, ALPN h2 yang sama, hash sandi yang serupa, tetapi hash ekstensinya berbeda karena httpx menegosiasikan pesanan ekstensi yang berbeda dari BoringSSL. Bagian ketiga adalah diskriminator yang menangkap pencakar yang berpura-pura menjadi Chrome.

Klasifikasikan sidik jari

Kirim JA4 ke /v1/tls/fingerprint dan mendapatkan kembali identifikasi klien, putusan, dan skor kepercayaan. Titik akhir mempertahankan korpus sidik jari yang diindeks oleh perpustakaan klien dan rentang versi.

Contoh respons untuk Python httpx JA4 di atas:

Itu verdict bidang adalah satu-satunya bagian yang perlu Anda tindak lanjuti di tepinya. browser_match adalah pintasan boolean untuk "apakah ini versi browser asli yang diketahui" dan merupakan penyebut yang berguna untuk pemantauan.

Pekerja Cloudflare, 30 baris

Cloudflare mengekspos JA4 aktif request.cf.ja4 untuk zona mana pun yang mengaktifkan sidik jari TLS (gratis pada paket Pro, tersedia melalui header Pekerja di tingkat gratis dengan tls_client_hello meminta). Simpan keputusan dalam cache selama satu jam karena sidik jari stabil hingga perpustakaan klien diperbarui.

Cache menjaga laju panggilan API tetap proporsional dengan sidik jari unik, bukan volume permintaan. Sebuah situs pada umumnya menerima kurang dari 5.000 JA4 yang berbeda per hari, sehingga panggilan upstream jarang terjadi pada kondisi stabil. Pekerja yang mengisolasi mengeluarkan Peta pada awal yang dingin, sehingga cache dibatasi dalam praktiknya; untuk asal kardinalitas tinggi, tukar ke caches.default dengan TTL 1 jam.

Hal yang sama di Express

Jika CDN Anda meneruskan JA4 di header (Fastly's fastly-tls-ja4, milik Cloudflare cf-ja4, atau milik Anda sendiri dari Worker upstream), penangan asal adalah middleware tipis.

Putuskan tindakan per putusan

Tiga jalur respons mencakup sebagian besar kasus. Jangan memblokir keranjang yang tidak dikenal; Anda akan membakar pengguna sebenarnya pada rilis browser baru.

Kode status 402 disengaja. Ini mengarahkan operator scraper ke /api untuk pemberian lisensi daripada memberi tahu mereka bahwa mereka diblokir, yang membuat Anda masuk dalam daftar "penerbit yang memusuhi AI". Versi ramahnya membuat Anda sesekali menjadi pelanggan API dan bukannya pengguna Twitter.

Ukur dampaknya

Sebelum membalik blok apa pun, catat JA4 plus Agen-Pengguna selama seminggu. The chart that matters is "share of requests where User-Agent claims Chrome but JA4 says scraper". Kebanyakan tim melihat 15 hingga 40%. Angka tersebut adalah radius ledakan Anda jika Anda mengirimkan daftar blokir khusus Agen-Pengguna. Setelah mengaktifkan gating berbasis JA4, grafik yang sama akan menunjukkan bahwa pangsa tersebut turun menjadi satu digit dalam beberapa jam.

Tingkat gratis di botoi mencakup 1.000 klasifikasi sidik jari per hari (5 permintaan/mnt burst). Dipasangkan dengan cache, ruang tersebut cukup untuk situs berukuran kecil hingga menengah. Ambil kunci di botoi.com/api/signup.

Referensi titik akhir: API Sidik Jari TLS. Terkait: Observabilitas API ketika agen AI adalah penelepon terberat Anda.

FAQ

Mengapa agen pengguna tidak berfungsi lagi?
Perayap pelatihan AI dan banyak penirunya (bot asli, pengikis pasar abu-abu, saluran RAG yang dibuat pelanggan) semakin banyak mengirimkan "Mozilla/5.0 ... Chrome/120" karena penerbit menambahkan blok robots.txt dan Agen-Pengguna. Jabat tangan TLS diatur oleh perpustakaan klien (Go net/http, Python httpx, Node undici, Chrome tanpa kepala) dan jauh lebih sulit untuk dipalsukan tanpa menulis ulang klien.
Apa itu JA4?
JA4 adalah format sidik jari Klien TLS Hello yang diterbitkan oleh FoxIO pada tahun 2023. JA4 meng-hash versi TLS yang dinegosiasikan, rangkaian sandi, ekstensi, ALPN, dan algoritme tanda tangan ke dalam string seperti t13d1516h2_8daaf6152771_e5627efa2ab1. Dua klien yang berbagi JA4 menggunakan tumpukan TLS yang sama, terlepas dari klaim header Agen-Pengguna mereka.
Apakah ini akan memblokir pengguna sebenarnya?
Tidak. Chrome asli, Safari, dan Firefox memiliki JA4 terkenal yang hanya berubah pada perubahan versi browser. Titik akhir botoi menandai sidik jari yang terkait dengan perpustakaan pengikisan (curl, wget, permintaan, httpx, Go default, Node undici, Chrome tanpa kepala dengan patch anti-deteksi). Anda mengizinkan sidik jari browser dan menantang atau membatasi nilai sisanya.
Bisakah scraper memalsukan JA4?
Ya, dengan usaha. Alat seperti curl-impersonate dan pustaka Python tls_client dapat meniru Chrome JA4. Spoofer masih merupakan minoritas kecil dari lalu lintas pengikis pada tahun 2026, dan setelah ID spoofer diketahui publik, Anda mengklasifikasikannya seperti sidik jari lainnya. JA4 menaikkan biaya dari satu header HTTP ke perpustakaan TLS bercabang; biaya tersebut cukup untuk mencegah dampak jangka panjang.
Bagaimana cara mendapatkan sidik jari di bagian tepi?
Cloudflare mengekspos ja4 pada objek permintaan melalui cf.botManagement dan pada pekerja melalui request.cf.tlsClientHelloLength plus ja4. Dengan cepat memaparkannya melalui fastly.tls. AWS CloudFront belum mengeksposnya secara langsung; rutekan melalui CF Worker atau gunakan titik akhir botoi /v1/tls/fingerprint dengan Client Hello mentah.

Mulai membangun dengan botoi

150+ endpoint API untuk pencarian, pemrosesan teks, pembuatan gambar, dan utilitas developer. Paket gratis, tanpa kartu kredit.