Kembali ke blog
Dasar-dasar Diterbitkan 19.08.2026 Waktu baca 5 menit

Yang benar-benar melindungi formulir: CAPTCHA, honeypot, perangkap waktu, CSRF

Kebanyakan formulir kontak mengandalkan satu trik melawan spam, dan banyak trik hanya menghentikan bot paling sederhana. Yang dihentikan setiap lapisan perlindungan, biayanya, dan kombinasi yang masuk akal.

Spam melalui formulir kontak jarang berasal dari orang yang mengetik manual. Kebanyakan berupa perangkat lunak yang menemukan formulir, mengisi setiap kolom, dan mengirim hasil – ribuan kali. Ada beberapa pertahanan, dan titik kerjanya sangat berbeda. Mengetahui fungsi sebenarnya membantu menghindari dua kesalahan: formulir tanpa perlindungan nyata dan formulir yang dijaga terlalu ketat hingga orang nyata menyerah.

Perbandingan lapisan perlindungan
Lapisan dan yang dihentikannya
  • Honeypot: bot sederhana yang mengisi setiap kolom
  • Perangkap waktu: skrip yang langsung mengirim setelah pemuatan
  • CAPTCHA: sebagian besar otomatisasi umum
  • Token CSRF: permintaan langsung ke endpoint
  • Batas laju: banjir dari satu sumber
  • Proof of work: pengiriman massal murah, tanpa pelacakan atau teka-teki
  • Pemeriksaan sisi server: semua yang melewati browser
Yang terlewat atau biayanya
  • Bot terarah melewatinya; jika penyembunyian buruk, pembaca layar mengumumkannya
  • Bot yang menunggu; tanpa tanda tangan sisi server mudah dipalsukan
  • Hambatan bagi semua, kendala aksesibilitas, sering pihak ketiga; tersedia jasa pemecahan
  • Bot yang memuat halaman terlebih dahulu juga memperoleh token sah
  • Spam tersebar pada banyak alamat IP
  • Pengirim gigih dengan daya komputasi; memerlukan JavaScript
  • Tidak ada yang cukup sendiri – tetapi tanpanya semua lapisan lain hanya hiasan
Tidak ada satu lapisan mencakup semuanya. Lapisan murah dan tidak terlihat menyaring sebagian besar; lapisan lebih berat untuk spam gigih dan terarah.

Honeypot dan perangkap waktu: filter tidak terlihat

Honeypot adalah kolom tambahan yang tidak pernah dilihat manusia, seperti kolom bernama “website” yang disembunyikan dengan CSS. Bot sederhana mengisi setiap kolom, sehingga honeypot terisi menunjukkan otomatisasi dan server dapat membuang pesan tanpa pemberitahuan. Bot yang ditulis untuk situs Anda, atau yang merender halaman seperti browser, melewatinya. Sembunyikan dengan benar: kolom yang sekadar digeser ke luar layar dapat diumumkan pembaca layar, dijangkau tombol Tab, atau diisi otomatis. Gunakan aria-hidden, tabindex -1, dan autocomplete off, ditambah label netral yang meminta siapa pun yang tiba di sana membiarkannya kosong.

Perangkap waktu mencatat kapan formulir disajikan dan menolak pengiriman yang tiba terlalu cepat untuk masuk akal. Orang memerlukan beberapa detik untuk membaca dan mengetik; banyak skrip mengirim dalam pecahan detik. Stempel waktu harus diperiksa pada server dan dilindungi dari manipulasi, misalnya ditandatangani atau disimpan dalam sesi – kolom waktu tersembunyi biasa cukup ditulis ulang bot. Pertahankan ambang rendah karena pengisian otomatis juga membuat orang nyata cepat. Bot yang cukup menunggu lolos: perangkap waktu adalah filter, bukan tembok.

CAPTCHA: efektif, tetapi tidak gratis

CAPTCHA meminta bukti bahwa tidak ada bot yang bekerja – dari teka-teki gambar hingga pemeriksaan latar belakang; layanan umum meliputi reCAPTCHA, hCaptcha, Cloudflare Turnstile, dan Friendly Captcha. CAPTCHA menghentikan sebagian besar otomatisasi umum, itulah alasan kepopulerannya. Namun setiap teka-teki terlihat adalah hambatan yang membuat sebagian pengunjung menyerah, dan kebanyakan layanan memuat skrip pihak ketiga yang menimbulkan pertanyaan privasi dan persetujuan. CAPTCHA juga hanya membantu jika disiapkan benar: kunci situs uji publik, widget tanpa skrip, atau token yang tidak pernah diverifikasi server tampak seperti perlindungan, tetapi bukan. Pemeriksaan gratis di formexposed.com menunjukkan kesalahan tersebut dari luar.

Aksesibilitas bagian dari biaya itu. Teka-teki gambar mengecualikan orang buta dan banyak orang dengan gangguan penglihatan, alternatif audio tidak membantu orang tuli-buta, dan tugas logika sulit membebani orang dengan hambatan kognitif. Kriteria keberhasilan WCAG 2.2 1.1.1 mewajibkan alternatif teks yang menjelaskan tujuan CAPTCHA serta bentuk alternatif bagi indra berbeda. Pemeriksaan latar belakang menghindari sebagian besar masalah, tetapi saat mencurigai sesuatu, alternatifnya sering kembali ke teka-teki visual – uji jalur itu dengan papan ketik dan pembaca layar.

Token CSRF: perlindungan pemalsuan, bukan spam

Token CSRF adalah nilai acak yang dimasukkan server dalam formulir dan diharapkan kembali. Token dirancang melawan pemalsuan permintaan lintas situs, ketika situs web lain membuat browser pengunjung mengirim permintaan yang tidak pernah dimaksudkan pengunjung. Pada formulir kontak publik, ada efek samping: bot yang langsung mengirim ke alamat formulir tanpa memuat halaman ditolak. Bot apa pun yang mengambil halaman dan mengirim token kembali lolos. Kebanyakan framework dan plugin formulir sudah menyertakan token CSRF – tetap aktifkan, tetapi jangan menganggapnya perlindungan spam.

Yang harus terjadi pada server

Pemeriksaan hanya dalam browser tidak melindungi apa pun
Semua yang hanya berjalan dalam browser – validasi JavaScript, skrip pemeriksa honeypot, token CAPTCHA yang tidak diverifikasi siapa pun – dilewati begitu seseorang mengirim permintaan langsung. Setiap keputusan menerima pesan harus berada pada server.
  • Validasi kembali setiap kolom pada server: kolom wajib, panjang, format e-mail, dan tanpa pergantian baris dalam kolom yang masuk ke header e-mail.
  • Verifikasi token CAPTCHA dan proof of work pada setiap pengiriman, dengan layanan penerbit atau kode sendiri, serta tolak token yang digunakan ulang.
  • Batasi pengiriman per alamat IP dan jendela waktu. Ini menghentikan banjir dari satu sumber; spam tersebar pada banyak alamat memerlukan lapisan lain.
  • Pertimbangkan proof of work: sebelum mengirim, browser menyelesaikan tugas komputasi kecil. Pengunjung tidak melihat teka-teki dan tidak ada yang dilacak, tetapi pengiriman massal menjadi mahal.

Kombinasi masuk akal: dua atau tiga lapisan

  1. 1Mulai dengan lapisan tidak terlihat: honeypot yang aksesibel dan perangkap waktu bertanda tangan, keduanya diperiksa pada server.
  2. 2Tambahkan batas laju per alamat IP agar satu sumber tidak dapat membanjiri formulir.
  3. 3Jika spam terarah masih lolos, tambahkan proof of work atau CAPTCHA – sebaiknya tanpa teka-teki terlihat dan dengan alternatif aksesibel.
  4. 4Pertahankan token CSRF bawaan framework – sebagai tambahan, bukan pertahanan.
  5. 5Uji hasil sebagai pengunjung – hanya papan ketik, dengan pembaca layar, pada telepon – dan pastikan pesan nyata tetap tiba.

Pada banyak situs, gabungan honeypot, perangkap waktu, dan batas laju sudah menghilangkan sebagian besar spam umum tanpa hambatan terlihat; CAPTCHA menjadi cadangan jika belum cukup. Pada WordPress, plugin formexposed gratis menggabungkan honeypot, pemeriksaan waktu, dan proof of work tanpa Google. Untuk melihat formulir dari luar – lapisan yang ada, apakah CAPTCHA dikonfigurasi efektif – pemeriksaan gratis di formexposed.com hanya memerlukan domain, tanpa akun. Pemeriksaan tidak dapat melihat kode server, sehingga bagian sisi server tetap tugas Anda.