Hentikan spam formulir kontak

Hentikan spam formulir kontak5 menit baca

Alternatif reCAPTCHA untuk formulir website

Bandingkan alternatif reCAPTCHA untuk formulir, dari Turnstile dan hCaptcha hingga proof-of-work dan tanpa captcha sama sekali, lalu beralih dengan perubahan kecil yang aman.

Preet SutharPendiri, Ikiform

Cloudflare Turnstile adalah pengganti reCAPTCHA yang paling dekat: sebagian besar tak terlihat, memakai pola site key dan secret key yang sama, dan pemeriksaan servernya memakai parameter yang sama. hCaptcha cocok untuk situs yang ingin tantangan gambar dari pihak selain Google, dan alat proof-of-work seperti ALTCHA berjalan tanpa pihak ketiga sama sekali. Untuk banyak formulir kontak, honeypot, skor konten, dan rate limit membuat captcha tidak diperlukan.

Mengapa orang beralih dari reCAPTCHA

reCAPTCHA masih berfungsi. Alasan menggantinya biasanya soal biaya bagi pengunjung dan bagi Anda. Versi 2 menampilkan teka-teki gambar ke sebagian pengunjung, yang lambat di ponsel dan sulit bagi pengguna screen reader. Versi 3 tak terlihat tetapi mengembalikan skor yang ambangnya harus Anda tentukan sendiri, tanpa tantangan sebagai cadangan. Dan reCAPTCHA kini merupakan produk Google Cloud: dokumentasi billing Google mencantumkan kuota gratis 10.000 penilaian per bulan, dengan tingkatan berbayar di atasnya.

Sebagian tim juga ingin lebih sedikit skrip pihak ketiga di halaman mereka. Apakah hal itu penting bagi kewajiban privasi Anda adalah pertanyaan untuk tinjauan hukum Anda sendiri; halaman ini hanya membandingkan cara kerja alat-alatnya.

Perbandingan alternatif

OpsiYang dilihat pengunjungSiapa yang memverifikasiPerlu diketahui
reCAPTCHA v2Checkbox, kadang teka-teki gambarServer Anda, dengan GoogleFamilier. Teka-tekinya adalah keluhan utama
reCAPTCHA v3Tidak adaServer Anda, dengan GoogleMengembalikan skor dari 0.0 hingga 1.0. Anda memilih batasnya dan menangani area abu-abu
Cloudflare TurnstileBiasanya tidak ada, kadang checkboxServer Anda, dengan CloudflareTanpa teka-teki gambar. Tanpa biaya untuk hingga 20 widget
hCaptchaCheckbox, kadang teka-teki gambarServer Anda, dengan hCaptchaBentuknya mirip reCAPTCHA v2, dari perusahaan lain. Ada paket Basic gratis, dengan paket Pro dan Enterprise berbayar
Friendly CaptchaWidget kecil yang memecahkan teka-teki di latar belakangServer Anda, dengan Friendly CaptchaProof of work, bukan sinyal pelacakan. Gratis untuk situs kecil non-komersial, paket berbayar untuk yang lain
ALTCHAWidget kecil yang memecahkan teka-teki di latar belakangHanya server Anda sendiriOpen source dan di-host sendiri, jadi tanpa pihak ketiga. Anda yang menjalankan dan memeliharanya
No captchaTidak adaServer AndaHoneypot, waktu bertanda tangan, skor konten, dan rate limit. Menghentikan sebagian besar bot, tidak semua

Setiap opsi kecuali yang terakhir tetap bergantung pada pemeriksaan sisi server. Widget saja tidak menghentikan apa pun, karena bot bisa mengirim ke endpoint Anda tanpa memuat halaman.

Apa yang diminta setiap opsi dari orang

Nilai setiap opsi dari sudut pandang pengunjung yang paling kesulitan dengannya. Teka-teki gambar lambat di ponsel dan sulit atau mustahil bagi orang yang penglihatannya terbatas; alternatif audio membantu sebagian orang dan membuat frustrasi yang lain. Pemeriksaan tak terlihat, seperti mode biasa Turnstile, reCAPTCHA v3, dan widget proof-of-work, tidak meminta apa-apa dari kebanyakan pengunjung, tetapi tetap bisa gagal bagi orang yang memakai browser berfokus privasi, jaringan ketat, atau perangkat lama. Saat itu terjadi, orang tersebut butuh jalan keluar: checkbox yang terlihat, pesan yang jelas, atau alamat email untuk menulis sebagai gantinya. Formulir yang gagal tanpa kabar kehilangan justru pesan-pesan yang tidak pernah Anda ketahui.

Pilih dengan dua pertanyaan

Memilih pengganti reCAPTCHA dengan dua pertanyaanMulai di siniTanpa server: situs statis atau pembuat situsapakah botlolospemeriksaantakterlihat?bisamenjalankankode server?widget AndasendiriTurnstile, hCaptcha,atau ALTCHAtetap tanpacaptchahoneypot, skor, ratelimitformulir kirim kebackendbackend verifikasikey Andahanya Turnstile, denganIkiformatau pemeriksaanterkelolatanpa key sama sekaliyayatidakMemilih pengganti reCAPTCHA dengan dua pertanyaanMulai di siniTanpa server: situs statis atau pembuat situsapakah botlolospemeriksaantakterlihat?bisamenjalankankodeserver?widget AndasendiriTurnstile, hCaptcha,atau ALTCHAtetaptanpacaptchahoneypot,skor, ratelimitformulir kirimke backendbackendverifikasi keyAndahanya Turnstile,dengan Ikiformataupemeriksaanterkelolatanpa key samasekaliyayatidak
  1. Pertama, tanyakan apakah bot lolos dari pemeriksaan tak terlihat. Jika tidak, tetap tanpa captcha dengan honeypot, skor, dan rate limit.
  2. Jika ya, tanyakan apakah Anda bisa menjalankan kode server. Jika bisa, pilih widget seperti Turnstile, hCaptcha, atau ALTCHA dan verifikasi di server Anda.
  3. Tanpa server, kirim formulir ke backend yang memverifikasi key Turnstile Anda, atau pakai pemeriksaan terkelola yang tidak butuh key.
Kebanyakan formulir kontak berhenti di pertanyaan pertama. Ukur spam Anda sebelum menambahkan widget apa pun.

Beralih dari reCAPTCHA ke Turnstile

Keduanya cukup mirip sehingga peralihannya hanya beberapa baris di setiap sisi. Buat widget Turnstile di dashboard Cloudflare untuk hostname yang sama, lalu ubah markup dan pemeriksaan server bersamaan.

BagianreCAPTCHA v2Turnstile
Skriphttps://www.google.com/recaptcha/api.jshttps://challenges.cloudflare.com/turnstile/v0/api.js
Elemen<div class="g-recaptcha" data-sitekey><div class="cf-turnstile" data-sitekey>
Field tokeng-recaptcha-responsecf-turnstile-response
URL verifikasihttps://www.google.com/recaptcha/api/siteverifyhttps://challenges.cloudflare.com/turnstile/v0/siteverify
Parameter verifikasisecret, response, remoteipsecret, response, remoteip, idempotency_key
<form action="/api/contact" method="POST">
  <input name="email" type="email" required />
  <textarea name="message" required></textarea>
  <div class="g-recaptcha" data-sitekey="RECAPTCHA_SITE_KEY"></div>
  <button>Send</button>
</form>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
const form = await request.formData();
const body = new URLSearchParams({
  secret: process.env.RECAPTCHA_SECRET_KEY!,
  response: String(form.get("g-recaptcha-response") ?? ""),
});
const check = await fetch("https://www.google.com/recaptcha/api/siteverify", { method: "POST", body });
const { success } = (await check.json()) as { success: boolean };
  • Ini berlaku untuk key reCAPTCHA klasik, yang diverifikasi di siteverify. Key yang dibuat di Google Cloud diperiksa lewat API assessment reCAPTCHA Enterprise; sisi Turnstile-nya tetap sama.
  • Jika Anda memakai v3, hapus ambang skor Anda. Turnstile menjawab lolos atau gagal; periksa action di jawabannya sebagai gantinya.
  • Perbarui Content Security Policy Anda: izinkan https://challenges.cloudflare.com di script-src dan frame-src, dan hapus entri Google begitu tidak ada lagi yang memakainya.
  • Kirim perubahan markup dan server dalam satu deploy. Halaman dengan widget baru yang mengirim ke server yang masih mengharapkan g-recaptcha-response akan menggagalkan setiap kiriman.

Mengganti reCAPTCHA dengan Ikiform

Jika formulir Anda mengirim ke Ikiform, hapus widget reCAPTCHA sepenuhnya. Ikiform tidak memverifikasi token reCAPTCHA atau hCaptcha. Nilai g-recaptcha-response yang tersisa akan masuk sebagai field tambahan, atau gagal dengan 422 validation_failed sebagai field tak dikenal jika Anda mendefinisikan field formulir. Lalu pilih penggantinya:

  • Tidak ada tambahan. Honeypot, skor konten, dan rate limit berjalan di setiap formulir. Banyak formulir kontak tidak butuh lebih dari itu.
  • Spam check diatur ke Ikiform. Cloudflare Turnstile, dijalankan oleh Ikiform, tanpa akun atau key. Kiriman HTML biasa mendapat halaman pemeriksaan singkat; kode fetch memanggil challenge() dari @ikiform/sdk.
  • Key Turnstile Anda sendiri. Pertahankan widget Anda sendiri di halaman, tempel key-nya ke pengaturan formulir, dan Ikiform memverifikasi token-nya.
<form action="https://ikiform.com/f/frm_xxxxxxxxxxxxxxxx" method="POST">
  <input name="email" type="email" required />
  <textarea name="message" required></textarea>
  <input name="_gotcha" type="text" tabindex="-1" autocomplete="off" hidden />
  <button>Send</button>
</form>

Formulir itu sama sekali tidak punya widget. Dengan Spam check diatur ke Ikiform, pemeriksaan manusia terjadi di ikiform.com setelah kiriman, jadi halaman Anda tidak memuat skrip captcha apa pun. Dokumentasi spam membahas setiap mode.

Jika Anda sekaligus beralih dari layanan formulir hosted, halaman perbandingan untuk Formspree dan Netlify Forms membahas apa lagi yang berubah.

Pastikan berfungsi

  1. Kirim formulir setelah peralihan. Kiriman diterima dan Anda paling banyak hanya melihat checkbox.
  2. Kirim ke endpoint dengan curl tanpa token. Kiriman ditolak, yang membuktikan server memeriksa token baru.
  3. Cari g-recaptcha dan recaptcha/api.js di halaman-halaman Anda. Tidak ada yang tersisa.
  4. Buka Submissions di dashboard. Kiriman baru ada di sana dengan setiap field yang Anda kirim.
  5. Tidak ada yang masuk? Ubah filter status di dashboard ke Spam. Spam mendapat jawaban sukses yang sama dengan kiriman asli.

Hal yang sering menjebak

  • Pengaturan pembuat situs. Pembuat situs dengan pengaturan reCAPTCHA bawaan mungkin mewajibkan elemen itu di setiap formulir selama pengaturannya aktif. Matikan pengaturannya sebelum menghapus elemen.
  • Halaman yang di-cache. Pengunjung dengan halaman lama yang di-cache masih mengirim g-recaptcha-response untuk sementara setelah Anda deploy. Perkirakan beberapa kegagalan, atau terima kedua token selama sehari.
  • Skor v3 di laporan. Jika dashboard atau peringatan membaca skor reCAPTCHA, semuanya akan diam setelah peralihan. Perbarui.

Pertanyaan

Mentok di salah satu langkah, atau ingin panduan untuk situasi Anda? Email hello@ikiform.com.