Kembali ke blog
Asas Diterbitkan 19.08.2026 Bacaan 6 minit

Perkara yang benar-benar melindungi borang: CAPTCHA, medan perangkap, perangkap masa, CSRF

Kebanyakan borang hubungan bergantung pada satu helah sahaja untuk melawan spam, dan banyak helah itu hanya menghentikan bot paling ringkas. Perkara yang dihentikan oleh setiap lapisan perlindungan, kosnya dan gabungan yang munasabah.

Spam melalui borang hubungan jarang datang daripada seseorang yang menaip dengan tangan. Kebanyakannya ialah perisian yang mencari borang, mengisi setiap medan dan menghantar hasilnya — ribuan kali. Terdapat beberapa pertahanan, dan ia berfungsi pada titik yang sangat berbeza. Mengetahui fungsi sebenar setiap satu membantu anda mengelakkan dua kesilapan: borang tanpa perlindungan sebenar, dan borang yang dikawal begitu ketat sehingga orang sebenar berputus asa.

Perbandingan lapisan perlindungan
Lapisan dan perkara yang dihentikannya
  • Medan perangkap: bot ringkas yang mengisi setiap medan
  • Perangkap masa: skrip yang menghantar serta-merta selepas dimuatkan
  • CAPTCHA: kebanyakan automasi umum
  • Token CSRF: permintaan yang dihantar terus ke titik akhir
  • Had kadar: banjiran daripada satu sumber
  • Bukti kerja: penghantaran besar-besaran yang murah, tanpa penjejakan atau teka-teki
  • Semakan pada pelayan: segala yang memintas pelayar
Perkara yang terlepas atau kosnya
  • Bot yang menyasarkan borang tertentu melangkaunya; jika medan itu tidak disembunyikan dengan baik, pembaca skrin membacakannya
  • Bot yang menunggu; tanpa tandatangan pada pelayan, ia mudah dipalsukan
  • Halangan bagi semua orang, halangan kebolehcapaian, sering melibatkan pihak ketiga; perkhidmatan penyelesaian tersedia
  • Bot yang memuatkan halaman terlebih dahulu turut memperoleh token yang sah
  • Spam yang tersebar merentas banyak alamat IP
  • Penghantar yang bertekad dengan kuasa pengkomputeran; memerlukan JavaScript
  • Tiada apa-apa dengan sendirinya — tetapi tanpanya, setiap lapisan lain hanyalah hiasan
Tiada satu lapisan yang meliputi segala-galanya. Lapisan yang murah dan tidak kelihatan menapis sebahagian besar spam; lapisan yang lebih berat adalah untuk spam berterusan yang disasarkan.

Medan perangkap dan perangkap masa: penapis tidak kelihatan

Medan perangkap ialah medan tambahan yang tidak pernah dilihat orang, contohnya medan bernama «website» yang disembunyikan dengan CSS. Bot ringkas mengisi setiap medan, maka medan perangkap yang diisi menandakan automasi dan pelayan boleh membuang mesej itu secara senyap. Bot yang ditulis khusus untuk laman anda, atau yang memaparkan halaman seperti pelayar, melangkaunya. Sembunyikannya dengan betul: medan yang hanya dialihkan ke luar skrin mungkin diumumkan oleh pembaca skrin, dicapai dengan kekunci Tab atau diisi oleh isian automatik. Gunakan aria-hidden, tabindex -1 dan autocomplete off, serta label neutral yang meminta sesiapa yang tiba di situ supaya membiarkannya kosong.

Perangkap masa merekodkan bila borang disampaikan dan menolak penghantaran yang tiba terlalu pantas untuk dipercayai. Orang memerlukan beberapa saat untuk membaca dan menaip; banyak skrip menghantar dalam pecahan saat. Cap masa mesti disemak pada pelayan dan dilindungi daripada pengusikan, contohnya ditandatangani atau disimpan dalam sesi — medan masa tersembunyi biasa hanya ditulis semula oleh bot. Kekalkan ambang yang rendah kerana isian automatik juga menjadikan orang sebenar pantas. Bot yang hanya menunggu dapat melepasi semakan: perangkap masa ialah penapis, bukan tembok.

CAPTCHA: berkesan, tetapi bukan tanpa kos

CAPTCHA meminta bukti bahawa tiada bot sedang bertindak — daripada teka-teki gambar hingga semakan yang berjalan di latar belakang; perkhidmatan lazim termasuk reCAPTCHA, hCaptcha, Cloudflare Turnstile dan Friendly Captcha. Ia menghentikan kebanyakan automasi umum, sebab itulah ia begitu popular. Tetapi setiap teka-teki yang kelihatan ialah halangan yang menyebabkan sesetengah pelawat berputus asa, dan kebanyakan perkhidmatan memuatkan skrip pihak ketiga, yang menimbulkan persoalan privasi dan persetujuan. CAPTCHA juga hanya membantu jika dikonfigurasikan dengan betul: kunci laman ujian awam, gajet tanpa skripnya atau token yang tidak pernah disahkan oleh pelayan kelihatan seperti perlindungan tetapi sebenarnya bukan. Semakan percuma di formexposed.com menunjukkan ralat sebegini dari luar.

Kebolehcapaian merupakan sebahagian daripada kos itu. Teka-teki gambar mengecualikan orang buta dan ramai orang berpenglihatan terhad, alternatif audio tidak membantu orang pekak-buta, dan tugasan logik yang rumit membebankan orang dengan ketidakupayaan kognitif. Kriteria kejayaan WCAG 2.2 1.1.1 memerlukan alternatif teks yang menerangkan tujuan CAPTCHA serta bentuk alternatif untuk deria yang berbeza. Semakan latar belakang mengelakkan kebanyakan masalah ini, tetapi apabila ia mengesan sesuatu yang mencurigakan, pilihan sandarannya sering menjadi teka-teki visual semula — uji laluan itu dengan papan kekunci dan pembaca skrin.

Token CSRF: perlindungan daripada pemalsuan, bukan daripada spam

Token CSRF ialah nilai rawak yang diletakkan oleh pelayan dalam borang dan dijangka diterima semula. Ia direka untuk melawan pemalsuan permintaan rentas laman, apabila laman web lain menyebabkan pelayar pelawat menghantar permintaan yang tidak pernah dimaksudkan oleh pelawat itu. Pada borang hubungan awam, ia mempunyai kesan sampingan: bot yang menghantar terus ke alamat borang tanpa memuatkan halaman ditolak. Mana-mana bot yang mendapatkan halaman dan menghantar semula token dapat melepasi semakan. Kebanyakan rangka kerja dan pemalam borang memang menyertakan token CSRF — kekalkan pengaktifannya, tetapi jangan mengiranya sebagai perlindungan spam.

Perkara yang mesti berlaku pada pelayan

Semakan yang hanya berjalan dalam pelayar tidak melindungi apa-apa
Apa-apa yang hanya berjalan dalam pelayar — pengesahan JavaScript, skrip yang menyemak medan perangkap, token CAPTCHA yang tidak disahkan oleh sesiapa — dilangkau sebaik sahaja seseorang menghantar permintaan secara terus. Setiap keputusan untuk menerima mesej perlu dibuat pada pelayan.
  • Sahkan semula setiap medan pada pelayan: medan wajib, panjang, format e-mel, serta tiada pemisah baris dalam medan yang akhirnya dimasukkan ke dalam pengepala e-mel.
  • Sahkan token CAPTCHA dan bukti kerja pada setiap penghantaran, dengan perkhidmatan yang mengeluarkannya atau dalam kod anda sendiri, dan tolak token yang digunakan semula.
  • Hadkan penghantaran mengikut alamat IP dan tempoh masa. Ini menghentikan banjiran daripada satu sumber; spam yang tersebar merentas banyak alamat memerlukan lapisan lain.
  • Pertimbangkan bukti kerja: sebelum menghantar, pelayar menyelesaikan tugasan pengiraan kecil. Pelawat tidak melihat teka-teki dan tiada penjejakan dilakukan, tetapi penghantaran besar-besaran menjadi mahal.

Gabungan yang munasabah: dua atau tiga lapisan

  1. 1Mulakan dengan lapisan tidak kelihatan: medan perangkap yang direka dengan mengambil kira kebolehcapaian dan perangkap masa yang ditandatangani, kedua-duanya disemak pada pelayan.
  2. 2Tambahkan had kadar mengikut alamat IP supaya satu sumber tidak dapat membanjiri borang.
  3. 3Jika spam yang menyasarkan laman anda masih melepasi semakan, tambahkan bukti kerja atau CAPTCHA — sebaik-baiknya yang tidak mempunyai teka-teki yang kelihatan dan menyediakan alternatif yang sesuai dari segi kebolehcapaian.
  4. 4Kekalkan token CSRF yang disediakan oleh rangka kerja anda — sebagai tambahan, bukan sebagai pertahanan.
  5. 5Uji hasilnya sebagai pelawat — hanya dengan papan kekunci, dengan pembaca skrin, pada telefon — dan semak bahawa mesej sebenar masih tiba.

Di banyak laman, gabungan medan perangkap, perangkap masa dan had kadar sudah membuang kebanyakan spam umum tanpa sebarang halangan yang kelihatan; CAPTCHA menjadi simpanan apabila itu tidak mencukupi. Pada WordPress, pemalam formexposed percuma menggabungkan medan perangkap, semakan masa dan bukti kerja tanpa memerlukan Google. Untuk melihat apa yang ditunjukkan oleh borang anda dari luar — lapisan yang wujud dan sama ada CAPTCHA dikonfigurasikan dengan berkesan — semakan percuma di formexposed.com hanya memerlukan domain, tanpa akaun. Ia tidak dapat melihat kod pelayan anda, maka bahagian pada pelayan kekal menjadi tugas anda.