Saya mencoba menemukan mekanisme anti-spamming yang cukup baik untuk mencegah input yang dihasilkan secara otomatis. Saya telah membaca teknik seperti captcha, 1 + 1 =? hal-hal berfungsi dengan baik, tetapi mereka juga menyajikan langkah ekstra yang menghalangi penggunaan cepat gratis dari aplikasi (tolong, saya tidak mencari yang seperti itu).
Saya sudah mencoba menyetel beberapa bidang tersembunyi di semua formulir saya, dengan display: none;
Namun, saya yakin skrip dapat dikonfigurasi untuk melacak id bidang formulir itu dan tidak mengisinya.
Apakah Anda menerapkan / mengetahui metode anti robot pengisian formulir otomatis yang baik? Apakah ada sesuatu yang dapat dilakukan secara mulus dengan pemrosesan sisi server HTML DAN / ATAU, dan (hampir) antipeluru? (tanpa JS karena seseorang dapat menonaktifkannya).
Saya mencoba untuk tidak bergantung pada sesi untuk ini (yaitu menghitung berapa kali tombol diklik untuk mencegah kelebihan beban).
Jawaban:
Cara yang mudah diterapkan tetapi bukan cara yang sangat mudah (terutama pada serangan "spesifik") untuk mengatasi anti-spam adalah melacak waktu antara pengiriman formulir dan pemuatan halaman.
Bot meminta halaman, mengurai halaman, dan mengirimkan formulir. Ini cepat.
Manusia mengetik URL, memuat halaman, menunggu sebelum halaman dimuat sepenuhnya, scroll ke bawah, membaca konten, memutuskan apakah akan berkomentar / mengisi formulir, memerlukan waktu untuk mengisi formulir, dan mengirimkan.
Perbedaan waktu bisa jadi tidak kentara; dan cara melacak waktu ini tanpa cookie memerlukan beberapa cara database sisi server. Ini mungkin berdampak pada kinerja.
Anda juga perlu menyesuaikan waktu ambang.
sumber
Saya benar-benar menemukan bahwa bidang Pot Madu sederhana bekerja dengan baik. Sebagian besar bot mengisi setiap bidang formulir yang mereka lihat, berharap mendapatkan validator bidang yang diperlukan.
http://haacked.com/archive/2007/09/11/honeypot-captcha.aspx
Jika Anda membuat kotak teks, menyembunyikannya di javascript, kemudian verifikasi bahwa nilai adalah kosong di server, gulma ini keluar 99% dari robot luar sana, dan tidak menyebabkan 99% dari pengguna Anda setiap frustrasi sama sekali. Sisa 1% yang menonaktifkan javascript akan tetap melihat kotak teks, tetapi Anda dapat menambahkan pesan seperti "Biarkan bidang ini kosong" untuk kasus seperti itu (jika Anda benar-benar peduli).
(Juga, perhatikan bahwa jika Anda melakukan style = "display: none" di lapangan, maka terlalu mudah bagi robot untuk hanya melihatnya dan membuang bidang, itulah sebabnya saya lebih suka pendekatan javascript).
sumber
Bagaimana jika - Bot tidak menemukannya
form
sama sekali?3 contoh:
Buat
form.html
dan tempatkan Andaform
di dalam<div id="formContainer">
elemen.Di dalam halaman tempat Anda perlu memanggil formulir itu, gunakan
<div id="dynamicForm"></div>
jQuery kosong dan ini:$("#dynamicForm").load("form.html #formContainer");
$_POST["email"]
harus kosong (tanpa nilai apa pun)! Jika tidak, jangan kirimkan formulir.<input name="sender" type="text" placeholder="Your email">
setelah (!) Yang "bot-umpan" masukan untuk alamat pengguna Email yang sebenarnya.Ucapan Terima Kasih:
Developer.Mozilla - Mematikan StackOverflow pelengkapan otomatis formulir
- Abaikan Tabindex
sumber
autocomplete=nope
akan default keon
;-) MDN: input # attr-autocompleteautocomplete="oh sunny day"
soal itu.Yang saya lakukan adalah menggunakan bidang tersembunyi dan meletakkan cap waktu di atasnya dan kemudian membandingkannya dengan cap waktu di Server menggunakan PHP.
Jika lebih cepat dari 15 detik (tergantung seberapa besar atau kecil formulir Anda) itu adalah bot.
Semoga bantuan ini
sumber
$.post
mengirim semua ke file php eksternal. 3) di php eksternal lagi dapatkan waktu server dan bandingkan dengan waktu sesi?Cara yang sangat efektif untuk menghilangkan spam secara virtual adalah dengan memiliki bidang teks yang memiliki teks di dalamnya seperti "Hapus teks ini untuk mengirimkan formulir!" dan teks itu harus dihapus untuk mengirimkan formulir.
Setelah validasi formulir, jika bidang teks berisi teks asli, atau teks acak apa pun, jangan kirimkan formulir. Bot dapat membaca nama formulir dan secara otomatis mengisi bidang Nama dan Email tetapi tidak tahu apakah mereka harus benar-benar menghapus teks dari bidang tertentu untuk dikirim.
Saya menerapkan metode ini di situs web perusahaan kami dan itu benar-benar menghilangkan spam yang kami dapatkan setiap hari. Ini benar-benar berhasil!
sumber
Bagaimana membuat kotak input kolom teks dengan warna yang sama dengan latar belakang yang harus tetap kosong. Ini akan mengatasi masalah tampilan pembacaan bot: tidak ada
sumber
http://recaptcha.net/reCAPTCHA adalah layanan antibot gratis yang membantu mendigitalkan buku
Telah diakuisisi oleh Google (pada 2009):
Lihat juga
sumber
Banyak dari spam-bot itu hanya skrip sisi server yang menjelajahi web. Anda dapat mengatasi banyak dari mereka dengan menggunakan beberapa javascript untuk memanipulasi permintaan formulir sebelum dikirim (yaitu, menyetel bidang tambahan berdasarkan beberapa variabel klien). Ini bukan solusi lengkap, dan dapat menyebabkan banyak masalah (misalnya, pengguna tanpa javascript, pada perangkat seluler, dll), tetapi ini dapat menjadi bagian dari rencana serangan Anda.
Ini adalah contoh yang sepele ...
Di suatu tempat di skrip php Anda ...
Selain itu, captcha sangat bagus, dan benar-benar merupakan pertahanan terbaik terhadap spam.
sumber
Saya terkejut belum ada yang menyebutkan metode ini:
Kelebihan:
Kekurangan:
Misalnya, metode ini digunakan oleh plugin WordPress, Cookies for Comments .
sumber
Dengan munculnya browser tanpa kepala (seperti phantomjs) yang dapat meniru apa pun, Anda tidak dapat mengira bahwa:
Jika dulu itu benar, itu tidak lagi benar.
Jika Anda bukan solusi yang ramah pengguna, cukup beri mereka tombol kirim "saya seorang spammer" yang cantik :
Tentu saja Anda dapat bermain dengan dua
input[type=image]
tombol gambar , mengubah urutan setelah setiap pemuatan, alternatif teks, konten gambar (dan ukurannya) atauname
tombol; yang akan membutuhkan beberapa pekerjaan server.Untuk alasan aksesibilitas, Anda harus meletakkan alternatif tekstual yang benar, tetapi menurut saya kalimat yang panjang lebih baik bagi pengguna pembaca layar daripada dianggap sebagai bot.
Catatan tambahan: contoh-contoh tersebut menggambarkan bahwa memahami bahasa Inggris (atau bahasa apa pun), dan harus membuat pilihan sederhana, lebih sulit bagi spambot daripada: menunggu 10 detik, menangani CSS atau javascript, mengetahui bahwa bidang tersembunyi, meniru gerakan mouse atau meniru pengetikan keyboard, ...
sumber
Cara yang sangat sederhana adalah dengan memberikan beberapa bidang seperti
<textarea style="display:none;" name="input"></textarea>
dan membuang semua balasan yang telah diisi.Pendekatan lain adalah menghasilkan seluruh formulir (atau hanya nama bidang) menggunakan Javascript; beberapa bot dapat menjalankannya.
Bagaimanapun, Anda tidak akan berbuat banyak melawan "bot" langsung dari Taiwan atau India, yang dibayar $ 0,03 per satu tautan yang diposting, dan mencari nafkah seperti itu.
sumber
Saya memiliki pendekatan sederhana untuk menghentikan pelaku spam yang 100% efektif, setidaknya menurut pengalaman saya, dan menghindari penggunaan reCAPTCHA dan pendekatan serupa. Saya beralih dari hampir 100 spam per hari di salah satu formulir html situs saya menjadi nol selama 5 tahun terakhir setelah saya menerapkan pendekatan ini.
Ia bekerja dengan memanfaatkan kemampuan ALIAS e-mail dari sebagian besar skrip penanganan formulir html (saya menggunakan FormMail.pl), bersama dengan "kode" pengiriman grafis, yang dengan mudah dibuat di program grafis yang paling sederhana. Salah satu grafik tersebut menyertakan kode M19P17nH dan prompt "Silakan masukkan kode di sebelah kiri".
Contoh khusus ini menggunakan urutan huruf dan angka acak, tetapi saya cenderung menggunakan versi non-Inggris dari kata-kata yang akrab bagi pengunjung saya (misalnya "pnofrtay"). Perhatikan bahwa perintah untuk bidang formulir dibuat ke dalam grafik, bukan muncul di formulir. Jadi, bagi robot, bidang bentuk itu tidak memberikan petunjuk apa pun tentang tujuannya.
Trik satu-satunya di sini adalah memastikan bahwa html formulir Anda menetapkan kode ini ke variabel "penerima". Kemudian, di program email Anda, pastikan bahwa setiap kode yang Anda gunakan disetel sebagai alias email, yang mengarah ke alamat email apa pun yang ingin Anda gunakan. Karena tidak ada perintah apa pun pada formulir untuk dibaca oleh robot dan tidak ada alamat email, ia tidak tahu apa yang harus dimasukkan ke bidang formulir kosong. Jika tidak mencantumkan apa pun di bidang formulir atau apa pun kecuali kode yang dapat diterima, pengiriman formulir gagal dengan kesalahan "penerima buruk". Anda dapat menggunakan grafik yang berbeda pada bentuk yang berbeda, meskipun menurut pengalaman saya itu tidak terlalu diperlukan.
Tentu saja, manusia dapat menyelesaikan masalah ini dalam sekejap, tanpa semua masalah yang terkait dengan reCAPTCHA dan skema serupa yang lebih elegan. Jika manusia spammer merespons kegagalan penerima dan memprogram kode gambar ke dalam robot, Anda dapat mengubahnya dengan mudah, setelah Anda menyadari bahwa robot telah diberi kode keras untuk merespons. Dalam lima tahun menggunakan pendekatan ini, saya tidak pernah menerima spam dari bentuk apa pun yang saya gunakan, juga tidak pernah ada keluhan dari pengguna manusia mana pun dari formulir tersebut. Saya yakin bahwa ini dapat dikalahkan dengan kemampuan OCR di robot, tetapi saya tidak pernah mengalaminya di salah satu situs saya yang menggunakan bentuk html. Saya juga telah menggunakan "perangkap spam" (kode html "datang kemari" tersembunyi yang mengarah ke kebijakan anti-spam saya) untuk efek yang baik, tetapi hanya sekitar 90% efektif.
sumber
Saya sedang memikirkan banyak hal di sini:
sumber
Pilihan lain daripada melakukan huruf dan angka acak seperti yang dilakukan banyak situs web, adalah membuat gambar acak dari objek yang dapat dikenali. Kemudian minta pengguna untuk mengetikkan warna apa pada gambar itu, atau objek apa itu sendiri.
Secara keseluruhan, setiap solusi akan memiliki kelebihan dan kekurangan. Anda harus menemukan median yang memuaskan antara terlalu sulit bagi pengguna untuk melewati mekanisme antispam dan jumlah bot spam yang bisa masuk.
sumber
Robot tidak dapat mengeksekusi JavaScript sehingga Anda melakukan sesuatu seperti menyuntikkan beberapa jenis elemen tersembunyi ke halaman dengan JavaScript dan kemudian mendeteksi keberadaannya sebelum pengiriman formulir tetapi berhati-hatilah karena beberapa pengguna Anda juga akan menonaktifkan JavaScript
Jika tidak, saya pikir Anda akan dipaksa untuk menggunakan bentuk bukti klien tentang "kemanusiaan"
sumber
Solusi terbaik yang saya temukan untuk menghindari spam oleh bot adalah menggunakan pertanyaan atau bidang yang sangat sepele di formulir Anda.
Coba tambahkan bidang seperti ini:
Trik ini mengharuskan pengguna untuk memahami apa yang harus dimasukkan pada formulir, sehingga lebih sulit untuk menjadi target pengisian formulir bot besar-besaran.
EDIT
Bagian belakang metode ini, seperti yang Anda nyatakan dalam pertanyaan Anda, adalah langkah ekstra bagi pengguna untuk memvalidasi formulirnya. Tapi, menurut saya, ini jauh lebih sederhana daripada captcha dan overhead saat mengisi formulir tidak lebih dari 5 detik, yang tampaknya dapat diterima dari sudut pandang pengguna.
sumber
Ada tutorial tentang ini di situs JQuery. Meskipun JQuery idenya adalah kerangka kerja independen.
Jika JavaScript tidak tersedia maka Anda mungkin perlu kembali ke pendekatan jenis CAPTCHA.
sumber
cara mudah yang saya temukan untuk melakukan ini adalah dengan meletakkan bidang dengan nilai dan meminta pengguna untuk menghapus teks di bidang ini. karena bot hanya mengisinya. jika bidang tidak kosong itu berarti pengguna bukan manusia dan tidak akan diposting. itu tujuan yang sama dari kode captcha.
sumber
Ini hanya sebuah ide, id menggunakannya dalam aplikasi saya dan bekerja dengan baik
Anda dapat membuat cookie pada gerakan mouse dengan javascript atau jquery dan di sisi server periksa apakah cookie ada, karena hanya manusia yang memiliki mouse, cookie hanya dapat dibuat oleh mereka cookie dapat menjadi stempel waktu atau token yang dapat divalidasi
sumber
Gunakan 1) formulir dengan token 2) Periksa formulir untuk penundaan formulir dengan alamat IP 3) Blokir IP (opsional)
sumber
Menurut pengalaman saya, jika formulir tersebut hanya berupa "kontak", Anda tidak memerlukan tindakan khusus. Spam disaring dengan baik oleh layanan webmail (Anda dapat melacak permintaan formulir web melalui skrip server untuk melihat apa yang efektif menjangkau email Anda, tentu saja saya menganggap Anda memiliki layanan email web yang baik: D)
Menurut saya itu tidak bagus, Memang yang ingin saya capai adalah menerima email dari pengguna yang melakukan beberapa tindakan tertentu karena mereka adalah pengguna yang saya minati (misalnya pengguna yang melihat halaman "CV" dan menggunakan kontak yang sesuai bentuk). Jadi jika pengguna melakukan sesuatu yang saya inginkan, saya mulai melacak sesinya dan menetapkan cookie (saya selalu menetapkan cookie sesi, tetapi ketika saya tidak memulai sesi, itu hanya cookie palsu yang dibuat untuk meyakini pengguna memiliki sesi). Jika pengguna melakukan sesuatu yang tidak diinginkan, saya tidak repot-repot menjaga sesi untuknya sehingga tidak kelebihan beban, dll.
Juga akan menyenangkan bagi saya bahwa layanan periklanan menawarkan beberapa jenis api (mungkin yang sudah ada) untuk melihat apakah pengguna "melihat iklan", kemungkinan pengguna yang melihat iklan adalah pengguna yang sebenarnya, tetapi jika bukan lumayan setidaknya kamu mendapatkan 1 view kok jadi tidak ada yang rugi. (dan percayalah, kontrol iklan lebih canggih daripada apa pun yang dapat Anda lakukan sendiri)
sumber
Sebenarnya jebakan dengan tampilan: tidak ada yang berfungsi seperti pesona. Ini membantu untuk memindahkan deklarasi CSS ke file yang berisi lembar gaya global, yang akan memaksa bot spam untuk memuatnya juga ( deklarasi direct style = "display: none;" kemungkinan dapat ditafsirkan oleh bot spam, seperti halnya a deklarasi gaya lokal dalam dokumen itu sendiri).
Ini dikombinasikan dengan tindakan pencegahan lain harus membuatnya diperdebatkan untuk setiap bot spam untuk membongkar sampah mereka (saya memiliki buku tamu yang diamankan dengan berbagai tindakan, dan sejauh ini mereka telah jatuh ke perangkap utama saya - namun, jika ada bot yang melewati mereka, di sana apakah orang lain siap untuk memicu).
Yang saya gunakan adalah kombinasi dari bidang formulir palsu (juga dijelaskan sebagai bidang tidak valid jika browser digunakan yang tidak menangani CSS secara umum atau display: tidak ada secara khusus), pemeriksaan kewarasan (yaitu format input valid?), cap waktu (pengiriman terlalu cepat dan terlalu lambat), MySQL (untuk menerapkan daftar hitam berdasarkan email dan alamat IP serta filter banjir), DNSBL (misalnya, SBL + XBL dari Spamhaus), analisis teks ( misalnya kata-kata yang merupakan indikasi kuat untuk spam) dan verifikasi email (untuk menentukan apakah alamat email yang diberikan valid atau tidak).
Satu catatan tentang surat verifikasi: Langkah ini sepenuhnya opsional, tetapi ketika seseorang memilih untuk menerapkannya, proses ini harus digunakan semudah mungkin (yaitu, intinya harus mengklik tautan yang terdapat dalam email ) dan menyebabkan alamat email yang dipermasalahkan dimasukkan ke daftar putih untuk jangka waktu tertentu sehingga verifikasi selanjutnya dihindari jika pengguna ingin membuat posting tambahan.
sumber
Saya menggunakan metode di mana ada kotak teks tersembunyi. Karena bot mengurai situs web, mereka mungkin mengisinya. Kemudian saya periksa apakah kosong jika tidak situs web kembali kembali.
Tambahkan verifikasi email. Pengguna menerima email dan dia perlu mengklik link. Jika tidak, buang postingan tersebut dalam beberapa waktu.
sumber
Saya telah menambahkan cek waktu ke formulir saya. Formulir tidak akan dikirimkan jika diisi kurang dari 3 detik dan ini bekerja dengan baik untuk saya terutama untuk formulir yang panjang. Berikut fungsi form check yang saya panggil pada tombol submit
sumber
Dengan bot spam yang semakin canggih dan teknik seperti peramban otomatis, akan semakin sulit untuk menentukan sumber spam. Tapi apakah diposkan oleh perangkat lunak, manusia, atau keduanya, spam adalah spam karena isinya. Saya pikir solusi terbaik adalah menjalankan konten yang diposting melalui API anti-spam seperti Cleantalk atau Akismet. Ini relatif murah dan efektif dan tidak merepotkan pengguna. Anda dapat memeriksa waktu pengiriman formulir dan pemeriksaan tradisional lainnya untuk bot yang kurang canggih sebelum memasuki API.
sumber
Anda dapat mencoba menipu robot-spam dengan menambahkan atribut tindakan yang benar setelah validasi Javascript. Jika robot memblokir Javascript, mereka tidak akan pernah bisa mengirimkan formulir dengan benar.
HTML
JAVASCRIPT
Saya kemudian menambahkan "callback" setelah .attr () untuk mencegah kesalahan.
sumber
Hanya senilai lima sen saya. Jika tujuannya adalah untuk menghentikan 99% robot yang terdengar cukup bagus, dan jika 99% robot tidak dapat menjalankan skrip Java, solusi terbaik yang mengalahkan semuanya adalah tidak menggunakan formulir yang memiliki tindakan kirim dengan URL posting.
Jika formulir dikontrol melalui java-script dan java-script mengumpulkan data formulir dan kemudian mengirimkannya melalui permintaan HTTP, tidak ada robot yang dapat mengirimkan formulir. Karena tombol kirim akan menggunakan Java-script untuk menjalankan kode yang mengirimkan formulir.
sumber