Panduan

Cara mendeteksi peramban headless dan otomatisasi di halaman pendaftaran

Sinyal peramban yang membongkar pendaftaran lewat Puppeteer, Playwright, dan Selenium, mengapa masing-masing bisa dipalsukan sendiri, dan cara menggabungkannya tanpa memblokir orang sungguhan.

9 menit baca · Diperbarui 2026-10-31 · Attrelix

Mengapa bot kini memakai peramban sungguhan

Beberapa tahun lalu, kebanyakan bot pendaftaran adalah skrip HTTP sederhana yang mengirim formulir Anda secara langsung. Bot seperti itu mudah dihentikan: mereka tidak menjalankan JavaScript, sehingga apa pun yang dihitung halaman Anda di peramban tidak pernah sampai. Kini, sebagian besar bot serius mengendalikan peramban sungguhan lewat Puppeteer, Playwright, atau Selenium, sering dalam mode headless, kadang melalui peramban anti-deteksi yang menyamarkan sidik jarinya. Mereka menjalankan JavaScript Anda, merender halaman, dan mengisi formulir seperti manusia.

Mendeteksinya berarti mencari titik-titik di mana peramban otomatis berbeda dari peramban yang dipakai manusia. Tidak satu pun sinyal di bawah ini merupakan bukti dengan sendirinya — operator yang gigih bisa menutupi masing-masing — tetapi sinyal ini murah dikumpulkan dan saling menumpuk.

Sinyal 1: flag WebDriver

Peramban di bawah otomatisasi bergaya WebDriver mengatur navigator.webdriver menjadi true. Ini memang bagian yang disengaja dari standar WebDriver, dan konfigurasi bawaan Selenium, Puppeteer, serta Playwright mengeksposnya.

const automated = navigator.webdriver === true;

Plugin “stealth” menghapus atau menimpanya, jadi ketiadaannya tidak membuktikan apa pun. Namun keberadaannya hampir pasti: pengguna asli praktis tidak pernah memilikinya.

Sinyal 2: user agent headless

Chrome headless menyebut dirinya HeadlessChrome di user agent kecuali operator menimpanya. Periksa juga di server dari header permintaan, karena user agent yang dilaporkan peramban lewat JavaScript bisa berbeda dari yang dikirimnya.

Sinyal 3: klien protokol DevTools terpasang

Puppeteer dan Playwright mengendalikan Chrome melalui protokol DevTools. Saat klien protokol mendengarkan event konsol, mencatat sebuah objek membuat peramban menyerialisasinya — bahkan membaca properti yang tidak pernah disentuh halaman biasa. Getter yang mencatat apakah ia dibaca adalah cara yang dikenal untuk mengetahuinya:

function devtoolsProtocolAttached() {
  let read = false;
  const e = new Error();
  Object.defineProperty(e, "stack", { get() { read = true; return ""; } });
  console.debug(e);
  return read;
}

Ini juga terpicu saat pengembang membuka DevTools, jadi beri bobot sedang alih-alih menjadikannya vonis.

Sinyal 4: rendering perangkat lunak dan jendela aneh

Peramban headless di server tidak punya GPU, sehingga WebGL beralih ke renderer perangkat lunak seperti SwiftShader atau llvmpipe. Nama renderer bisa dibaca melalui ekstensi WEBGL_debug_renderer_info bila peramban menyediakannya. Beberapa konfigurasi headless juga melaporkan jendela dengan lebar atau tinggi nol. Mesin virtual dan desktop jarak jauh memiliki ciri yang sama, jadi masing-masing adalah sinyal lemah.

Sinyal 5: sidik jari yang saling bertentangan

Peramban anti-deteksi dibuat agar tampak seperti banyak peramban sungguhan yang berbeda. Caranya dengan menimpa properti, dan penimpaan jarang benar-benar konsisten. Yang layak dibandingkan:

  • Sistem operasi di user agent dengan navigator.platform dan User-Agent Client Hints.
  • Keluarga peramban di user agent dengan fitur yang hanya dimiliki mesin tersebut.
  • Font yang terpasang dengan font bawaan sistem operasi itu.
  • Canvas yang digambar dua kali berturut-turut menghasilkan dua gambar berbeda — tanda derau yang disuntikkan.
  • Notification.permission menyatakan “denied” sementara Permissions API menyatakan “prompt”.

Setiap kontradiksi lemah bila sendiri, karena ekstensi privasi dan konfigurasi tak biasa juga menghasilkan sebagian. Dua atau tiga sekaligus adalah pola yang kuat.

Sinyal 6: token yang tidak pernah kembali

Teknik yang sederhana dan tangguh: minta skrip halaman pendaftaran meminta token sekali pakai berumur pendek, taruh di kolom tersembunyi formulir, lalu verifikasi di server. Bot yang melewati JavaScript Anda datang tanpa token yang valid; bot yang memakai ulang token lama datang dengan token yang sudah terpakai. Anda tidak perlu tahu bagaimana bot bekerja untuk menyadari bahwa ia tidak pernah benar-benar menjalankan halaman Anda. Buat token sekali pakai, terikat ke situs Anda, dan kedaluwarsa dalam hitungan menit.

Sinyal 7: perilaku, bukan sidik jari

Sidik jari bisa dipalsukan; perilaku jauh lebih sulit. Manusia membaca formulir, menggerakkan penunjuk, dan mengetik. Skrip mengisi kolom dan mengirim dalam beberapa ratus milidetik setelah halaman dimuat, tanpa satu pun event masukan yang tepercaya.

Pengukuran yang andal tidak butuh perangkat lunak tambahan: agen Anda menerbitkan token pengunjung saat halaman dimuat, dan server membandingkan waktu itu dengan saat pemeriksaan. Kurang dari sekitar satu detik dari muat sampai mendaftar berarti skrip. Bila agen juga dapat melaporkan event masukan tepercaya, pengiriman seketika tanpa event penunjuk, tombol, atau sentuhan menjadi konfirmasi kedua yang mandiri.

Catatan untuk sinyal 3: di Chrome saat ini trik DevTools hanya terpicu bila klien otomatisasi berlangganan event konsol, jadi anggap sebagai bonus, bukan detektor utama.

Gabungkan, jangan blokir karena satu sinyal

Perlakukan setiap sinyal sebagai poin dalam skor dan putuskan berdasarkan totalnya. Pembobotan awal yang wajar, dari terkuat ke terlemah:

SinyalBobotAlasan
navigator.webdriver truetinggiHampir tidak pernah true untuk pengguna asli
User agent HeadlessChrometinggiHanya build headless yang mengirimnya
Token hilang atau dipakai ulangtinggiSkrip halaman tidak berjalan, atau berjalan sekali untuk banyak pendaftaran
Protokol DevTools terpasangsedangPengembang dengan DevTools terbuka juga memicunya
Kontradiksi OS atau perambansedangPenimpaan anti-deteksi, tetapi juga sebagian ekstensi
Renderer perangkat lunak, jendela nolrendahVM dan desktop jarak jauh juga memilikinya

Gabungkan sinyal peramban dengan sinyal sisi server — pendaftaran dari rentang IP cloud, lonjakan dari satu subnet, akun yang terkait dengan perangkat yang sama — dan sangat sedikit bot yang akan tampak bersih di semuanya sekaligus.

Yang sebaiknya tidak dilakukan

  • Jangan blokir hanya karena tidak ada plugin atau bahasa. Peramban yang diperkuat untuk privasi menghapusnya.
  • Jangan kirim logika deteksi sebagai pemeriksaan bernama jelas yang bisa dicari operator lalu diakali sekaligus; kumpulkan fakta mentah di peramban dan putuskan di server.
  • Jangan percaya begitu saja apa pun yang dilaporkan peramban. Klien berada di bawah kendali bot. Verifikasi terjadi di server Anda, dengan rahasia Anda.

Cara Attrelix melakukannya

Agen Attrelix mengumpulkan fakta peramban ini dan token pengunjung sekali pakai di halaman pendaftaran Anda; server menggabungkannya dengan sinyal jaringan, kotak masuk, dan akun terkait menjadi satu skor. Semua bobot dipublikasikan di dokumentasi, dan tidak ada satu pun sinyal lemah yang bisa mengirim pendaftaran ke tinjauan dengan sendirinya.

Ringkasan

  • Bot modern memakai peramban sungguhan; cari di mana otomatisasi berbeda dari manusia.
  • WebDriver, user agent headless, dan token yang hilang adalah sinyal kuat; sisanya lemah tetapi menumpuk.
  • Putuskan di server berdasarkan skor, jangan pernah dari satu flag peramban.

Panduan lainnya