Bagaimana cara mencegah robot mengisi formulir secara otomatis?

105

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).

Gal
sumber
5
Terima kasih karena tidak menginginkan solusi captcha! IMO, bentuk spam adalah masalah bagi pemilik situs dan mencegahnya bukanlah beban yang harus ditanggung oleh pengguna. Ada terlalu banyak cara alternatif untuk mengatasi spam di situs, sebagaimana dibuktikan dengan balasan di sini. Metode yang membutuhkan interaksi pengguna sebaiknya hanya digunakan oleh pemalas atau pemula.
Mike

Jawaban:

73

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.

Pindatjuh
sumber
9
Berhati-hatilah jika Anda ingin mengizinkan pengguna akhir menggunakan pengisi formulir otomatis seperti addons.mozilla.org/en-US/firefox/addon/1882 yang memungkinkan pengiriman sangat cepat. Serta captcha, hal apa pun yang mengganggu pengguna akhir umumnya tidak baik, dan terutama ketika mencegah seseorang yang terburu-buru untuk pergi (sangat) cepat.
kepingan salju
1
Poin bagus, tapi semuanya tergantung pada konteksnya. Jika formulirnya adalah formulir login, saya setuju sepenuhnya dengan Anda. Tetapi mengapa menonaktifkan login dari bot? Jika konteksnya adalah kotak komentar, seperti ini di StackOverflow, saya tahu pasti: jika Anda menggunakan isi otomatis di kotak komentar, maka Anda adalah pelaku spam. Perhatikan bahwa jika Anda menggunakan pengisian otomatis untuk tanda tangan, Anda masih memerlukan waktu untuk benar-benar mengetik konten.
Pindatjuh
5
Perhatikan bahwa SO melakukan sesuatu seperti ini. Edit komentar menjadi cepat atau terlalu banyak kali berturut-turut dan Anda akan disajikan dengan pertanyaan "Apakah Anda manusia?" halaman.
Jakob Borg
2
Peretas tidak selalu meminta formulir tersebut. Terkadang, URL yang dibuat dengan hati-hati (menggunakan GET atau POST) akan cukup untuk memposting formulir beberapa kali dengan sedikit usaha.
perajin
1
Terapkan ini dengan captcha. Jika formulir dikirimkan terlalu cepat, berikan captcha agar pengguna asli dapat melewatinya.
Yashovardhan99
75

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).

Ben Scheirman
sumber
1
Menurut Anda, apakah bot benar-benar menelusuri file css dan menganggapnya display: none; ? Saya benar-benar lebih suka tidak menggunakan solusi berbasis JS, karena dapat dengan mudah dinonaktifkan.
Gal
1
Tampaknya ini menjadi solusi lama untuk webmaster termasuk banyak kata kunci yang tidak relevan untuk meningkatkan peringkat web mereka. Saya pikir bot crawler pencarian seperti google dapat membayangkan itu ditampilkan: tidak ada. Mengapa bot lain tidak bisa melakukan itu?
kepingan salju
2
Saya telah menggunakan teknik ini sekarang di dua situs yang dipalu dan pendaftaran bot sekarang nol 0 di keduanya. Ini tidak akan membantu melawan serangan yang ditargetkan, tetapi kebanyakan hanya mencari eksploitasi atau untuk spamming.
nirvdrum
25
Poin kecil di sini: untuk mengatasi masalah JS, cukup gunakan CSS untuk memposisikan input honeypot Anda di atas halaman atas - dengan cara ini akan baik-baik saja jika js dinonaktifkan, dan untuk mengatasinya bot harus dapat mengurai CSS posisi absolut dan membuat keputusan yang masuk akal tentang apakah itu honeypot atau tidak. sedikit lebih tahan peluru dengan cara ini :)
completelyNotLizards
3
@ alexy13 ya itu lebih sederhana tetapi seperti yang disebutkan dalam jawaban, itu juga jauh lebih mudah bagi bot untuk mengetahui apa yang Anda coba lakukan, cukup uji untuk satu properti CSS. Namun, jika Anda menggunakan strategi pemosisian absolut, bot harus mengurai semua aturan pemosisian Anda dan aturan sebagian besar induk elemen untuk dapat mengetahui apakah masukan akan terlihat atau tidak, dan kemudian mencari tahu apakah atau tidak untuk bertindak berdasarkan informasi itu - yang semuanya lebih merepotkan daripada nilainya untuk sebagian besar (jika tidak semua) bot.
completelyNotLizards
22

Bagaimana jika - Bot tidak menemukannya formsama sekali?

3 contoh:

  1. Sisipkan formulir Anda menggunakan AJAX
  • Jika Anda setuju dengan pengguna yang menonaktifkan JS dan tidak dapat melihat / mengirimkan formulir, Anda dapat memberi tahu mereka dan meminta mereka mengaktifkan Javascript terlebih dahulu menggunakan pernyataan noscript:
<noscript>
  <p class="error">
    ERROR: The form could not be loaded. Please enable JavaScript in your browser to fully enjoy our services.
  </p>
</noscript>
  • Buat form.htmldan tempatkan Anda formdi 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");

  1. Bangun formulir Anda sepenuhnya menggunakan JS

// THE FORM
var $form = $("<form/>", {
  appendTo : $("#formContainer"),
  class    : "myForm",
  submit   : AJAXSubmitForm
});

// EMAIL INPUT
$("<input/>",{
  name        : "Email", // Needed for serialization
  placeholder : "Your Email",
  appendTo    : $form,
  on          : {        // Yes, the jQuery's on() Method 
    input : function() {
      console.log( this.value );
    }
  }
});

// MESSAGE TEXTAREA
$("<textarea/>",{
  name        : "Message", // Needed for serialization
  placeholder : "Your message",
  appendTo    : $form
});

// SUBMIT BUTTON
$("<input/>",{
  type        : "submit",
  value       : "Send",
  name        : "submit",
  appendTo    : $form
});

function AJAXSubmitForm(event) {
  event.preventDefault(); // Prevent Default Form Submission
  // do AJAX instead:
  var serializedData = $(this).serialize();
  alert( serializedData );
  $.ajax({
    url: '/mail.php',
    type: "POST",
    data: serializedData,
    success: function (data) {
      // log the data sent back from PHP
      console.log( data );
    }
  });
}
.myForm input,
.myForm textarea{
  font: 14px/1 sans-serif;
  box-sizing: border-box;
  display:block;
  width:100%;
  padding: 8px;
  margin-bottom:12px;
}
.myForm textarea{
  resize: vertical;
  min-height: 120px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="formContainer"></div>

  1. Masukan bot-bait
  • Bot menyukai ( sangat suka) elemen masukan cakep seperti:
<input 
  type="text"
  name="email"
  id="email"
  placeholder="Your email"
  autocomplete="nope"
  tabindex="-1"
They wll be happy to enter some value such as
`[email protected]`
  • Setelah menggunakan HTML di atas, Anda juga dapat menggunakan CSS untuk tidak menampilkan input:
input[name=email]{ /* bait input */
  /* do not use display:none or visibility:hidden
     that will not fool the bot*/
  position:absolute;
  left:-2000px;
}
  • Sekarang masukan Anda tidak terlihat oleh pengguna yang diharapkan dalam PHP bahwa Anda $_POST["email"] harus kosong (tanpa nilai apa pun)! Jika tidak, jangan kirimkan formulir.
  • Akhirnya, semua yang perlu Anda lakukan adalah membuat masukan lain seperti <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

Roko C. Buljan
sumber
7
Dapatkah peramban pengguna yang sah berpotensi melihat bidang masukan umpan sebagai bidang email dan mengisinya secara otomatis saat pengguna memilih untuk mengisi otomatis sisa formulir? Pengguna tidak akan melihat bidang yang jauh dari layar telah terisi, dan mereka masih akan terlihat seperti bot.
wilbbe01
Saya curiga autocomplete=nopeakan default ke on;-) MDN: input # attr-autocomplete
menangani
@ menangani itu tidak masalah, itu masukan umpan bot. Anda bisa menulis autocomplete="oh sunny day"soal itu.
Roko C. Buljan
19

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

adnhack
sumber
1
Ide bagus, bagaimanapun, saya akan menetapkan batas menjadi sekitar 3 sampai 5 detik untuk memungkinkan pengguna yang cepat / kuat. Saya menggunakan pendekatan yang sama, dan menetapkan batas pada formulir saya menjadi 3 detik menyaring 99% bot.
Kayla
@adnhack Maksud Anda seperti ini: 1) saat halaman dimuat dengan php dapatkan waktu server dan buat sesi. 2) pengguna atau bot mengisi formulir, klik Kirim, dengan $.postmengirim semua ke file php eksternal. 3) di php eksternal lagi dapatkan waktu server dan bandingkan dengan waktu sesi?
Andris
16

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!

HawleyTronics
sumber
Menarik, tahukah Anda jika ini lebih efektif daripada jawaban lain ... kotak teks tersembunyi atau melacak waktu yang diperlukan untuk mengisi formulir?
Austin Henley
4
Ini juga akan menangkap pengguna yang tidak dapat mengikuti petunjuk, yang mungkin tidak diinginkan.
wilbbe01
Saya suka ini! Hingga bot mulai mencoba berbagai kombinasi bidang kosong dan terisi ... cara terbaik untuk mengujinya adalah menerapkan ini dan memindai dengan salah satu dari ini: sectoolmarket.com/…
nmit026
Efektif sejauh orang yang mengelola bot tidak mengetahui dan mengubah kodenya.
Talha Awan
11

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

Steve
sumber
2
Tambahkan ini sebagai komentar silakan ketika Anda mendapatkan lebih banyak reputasi daripada jawaban;)
Rob
3
Ini menghadirkan masalah aksesibilitas. Indeks honeypot tidak akan disembunyikan dari pengguna dengan pembaca layar.
Otterfan
5
Saya pengguna tunanetra, dan saya pernah menemukan bidang formulir seperti ini, dan label di atasnya berbunyi: "Jika Anda dapat melihat ini, biarkan kosong." IMO yang sangat efektif.
Parham Doustdar
8

http://recaptcha.net/

reCAPTCHA adalah layanan antibot gratis yang membantu mendigitalkan buku

Telah diakuisisi oleh Google (pada 2009):

Lihat juga

Anantha Kumaran
sumber
5
Sebagai pengguna, saya merasa recaptcha sering kali sulit dipahami. Beberapa kata sangat sulit dibaca, sehingga Anda harus mencobanya 3 atau 4 kali. Meskipun ini pasti akan membantu masalah robot.
Brian
Apa yang dikatakan Brian dan: yro.slashdot.org/story/10/03/02/0135238/…
SF.
Saya menemukan diri saya di halaman ini karena CAPTCHA / reCAPTCHA saat ini tidak menghentikan pengiriman formulir bot. Ini adalah 5 tahun kemudian dan ini adalah teknik baru daripada saat jawaban ini diberikan
JohnnyFaldo
Saya heran mengapa jawaban ini tidak memiliki lebih banyak suara positif. disukai atau tidak oleh pengguna, ini adalah solusi yang bagus. Apalagi jika hanya digunakan untuk formulir pendaftaran.
towi_parallelism
Hari-hari ini recaptcha dimulai sebagai kotak centang sederhana, mungkin tidak sesakit dulu? ...
rogerdpack
6

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 ...

<script>
function checkForm()
{
    // When a user submits the form, the secretField's value is changed
    $('input[name=secretField]').val('goodValueEqualsGoodClient');

    return true;
}
</script>

<form id="cheese" onsubmit="checkForm">
<input type="text" name="burger">

<!-- Check that this value isn't the default value in your php script -->
<input type="hidden" name="secretField" value="badValueEqualsBadClient">

<input type="submit">
</form>

Di suatu tempat di skrip php Anda ...

<?php

if ($_REQUEST['secretField'] != 'goodValueEqualsGoodClient')
{
    die('you are a bad client, go away pls.');
}

?>

Selain itu, captcha sangat bagus, dan benar-benar merupakan pertahanan terbaik terhadap spam.

John Himmelman
sumber
Terima kasih, meskipun javascript dapat dengan mudah dinonaktifkan di browser apa pun, sehingga "mekanisme anti spam" saya hancur, jadi saya mencari sesuatu yang lebih global.
Gal
Saya mungkin salah, tetapi bukankah ini akan memberi tahu setiap pengguna yang menonaktifkan JS 'Anda adalah klien yang buruk, tolong pergi.'?
Gal
Gal, ini adalah contoh yang sepele , hanya mendemonstrasikan cara memvalidasi terhadap var permintaan yang disetel oleh sisi klien js.
John Himmelman
@ John Himmelman Captcha dapat dipecahkan dan belum tentu merupakan pertahanan terbaik terhadap spam. Ada layanan berbayar seperti anti-captcha.com yang akan memecahkan formulir captcha dengan biaya rendah.
Masalah dengan pendekatan ini adalah saya telah melihat banyak bot yang menggunakan PhantomJS. Ini akan memungkinkan mereka untuk melewatinya.
Parham Doustdar
4

Saya terkejut belum ada yang menyebutkan metode ini:

  • Di halaman Anda, sertakan gambar kecil dan tersembunyi.
  • Tempatkan cookie saat menyajikan gambar ini.
  • Saat memproses pengiriman formulir, periksa cookie.


Kelebihan:

  • nyaman bagi pengguna dan pengembang
  • tampaknya bisa diandalkan
  • tanpa JavaScript

Kekurangan:

  • menambahkan satu permintaan HTTP
  • membutuhkan cookie untuk diaktifkan pada klien


Misalnya, metode ini digunakan oleh plugin WordPress, Cookies for Comments .

Gras Double
sumber
Bukankah bot yang menggunakan barang-barang seperti PhantomJS dengan mudah menyiasati ini?
Parham Doustdar
1
Karena ini adalah mesin browser lengkap, yang memuat aset dan semacamnya, ya itu seharusnya mungkin. Namun, saya tidak yakin ini sering digunakan untuk bot spam, karena mungkin jauh lebih lambat daripada skrip cURL.
Gras Double
ada alasan mengapa ini lebih baik daripada token CSRF?
xenoterracide
1
token CSRF tidak akan menghentikan bot sama sekali. Permintaan pertama, DAPATKAN formulir, yang menyertakan token. Permintaan kedua, POST formulir, termasuk token.
Gras Double
4

Dengan munculnya browser tanpa kepala (seperti phantomjs) yang dapat meniru apa pun, Anda tidak dapat mengira bahwa:

  • bot spam tidak menggunakan javascript,
  • Anda dapat melacak peristiwa mouse untuk mendeteksi bot,
  • mereka tidak akan melihat bahwa bidang tersembunyi secara visual,
  • mereka tidak akan menunggu waktu tertentu sebelum mengirimkan.

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 :

 <input type="submit" name="ignore" value="I am a spammer!" />
 <input type="image" name="accept" value="submit.png" alt="I am not a spammer" />

Tentu saja Anda dapat bermain dengan dua input[type=image]tombol gambar , mengubah urutan setelah setiap pemuatan, alternatif teks, konten gambar (dan ukurannya) atau nametombol; yang akan membutuhkan beberapa pekerjaan server.

 <input type="image" name="random125454548" value="random125454548.png"
      alt="I perfectly understand that clicking on this link will send the
      e-mail to the expected person" />
 <input type="image" name="random125452548" value="random125452548.png"
      alt="I really want to cancel the submission of this form" />

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, ...

Adam
sumber
Bagi saya, fakta bahwa Anda harus meletakkan teks alternatif berarti bahwa dua solusi gambar Anda sama rentannya terhadap skrip seperti alternatif lainnya. Dan untuk tombol "Saya bukan spammer": tidak bisakah itu dituliskan juga?
Hawkeye
@Hawkeye Jawaban saya adalah bahwa browser tanpa kepala dapat meniru apa pun : javascript, penundaan, gerakan mouse, bidang tersembunyi, ... Istilah "cantik" sebelum contoh saya adalah semacam "sarkastik". Tetapi contoh-contoh tersebut menggambarkan bahwa memahami bahasa Inggris, dan harus membuat pilihan sederhana, lebih sulit bagi spambot daripada: menunggu 10 detik, menangani CSS atau javascript, mengetahui bahwa sebuah bidang tersembunyi, meniru gerakan mouse atau meniru ketikan keyboard, ...
Adam
Saya mengerti maksud Anda sekarang. Mungkin tambahkan pernyataan terakhir "Tapi contoh-contoh itu menggambarkan ..." dll. Ke jawaban Anda. Karena itu membantuku mengerti maksudmu. Tampaknya pada awalnya menjadi argumen yang saling bertentangan bahwa "kami tidak dapat menganggap bot tidak bisa ..." tetapi kemudian mencantumkan hal-hal yang masih tidak dapat kami anggap bot tidak dapat melakukannya. Tetapi inti dari poin Anda adalah bahwa contoh Anda (harus membuat pilihan tombol kirim mana) lebih sulit --yang (sekarang saya mengerti) adalah jawaban yang brilian. +1
Hawkeye
3

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.

SF.
sumber
2
Saya tahu jawaban ini hampir berusia 7 tahun tetapi saya merasa ini layak untuk dikomentari. Banyak bot dapat diprogram untuk mengabaikan bidang dengan style = "display: none" untuk menghindari jenis perlindungan ini.
Kenny Johnson
Ada lusinan metode untuk mengaburkan masukan, menggunakan Javascript, menampilkan elemen dummy di atasnya, memindahkannya keluar dari area yang terlihat, menatanya untuk menyatu dengan latar belakang atau dekorasi tata letak dengan sempurna, dll. Mengacak (mencirikan) nama masukan (dan menyimpan pemetaan dari hashed => original di sesi server-side) akan membantu melawan penggunaan nama sebagai petunjuk dan secara manual memetakan input mana yang valid. Terlepas dari itu, tidak ada pertahanan terhadap spam manual.
SF.
2

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.

pengguna2643367
sumber
1

Saya sedang memikirkan banyak hal di sini:

  1. menggunakan JS (meskipun Anda tidak menginginkannya) untuk melacak gerakan mouse, tekan tombol, klik mouse
  2. mendapatkan url rujukan (yang dalam hal ini harus satu dari domain yang sama) ... pengguna biasa harus menavigasi melalui situs web sebelum mencapai formulir kontak: PHP: Bagaimana cara mendapatkan URL perujuk?
  3. menggunakan variabel $ _SESSION untuk mendapatkan IP dan memeriksa formulir yang dikirim terhadap daftar IP tersebut
  4. Isi satu bidang teks dengan beberapa teks tiruan yang dapat Anda periksa di sisi server jika telah ditimpa
  5. Periksa versi browser: http://chrisschuld.com/projects/browser-php-detecting-a-users-browser-from-php.html ... Jelas bahwa bot tidak akan menggunakan browser tetapi hanya skrip .
  6. Gunakan AJAX untuk mengirim field satu per satu dan periksa perbedaan waktu antar pengiriman
  7. Gunakan halaman palsu sebelum / sesudah formulir, hanya untuk mengirim masukan lain
valicu2000
sumber
Bisakah Anda menguraikan beberapa langkah berikut valicu2000? Apakah masih berlaku di tahun 2020? Terima kasih.
Michael Moriarty
0

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.

Brian
sumber
Ide bagus. Saya tidak akan menggunakan warna sebagai kriteria, karena ini mungkin mengecualikan pengguna buta warna
Neil Aitken
Ya, poin yang bagus. Sebenarnya masalah dengan gambar secara umum adalah gambar tidak dapat diakses, dan dengan membuatnya "dapat diakses" dengan tag alt, robot dapat dengan mudah mengetahuinya.
Brian
Gambar selalu merupakan ide yang buruk ... teksnya hampir tidak dapat dibaca, Saya menghadapi masalah ini dengan situs web lain
valicu2000
Ini hanya captcha dengan twist yang sangat kecil yang membuat lebih sulit bagi pengguna. Juga tidak bisa diakses sama sekali.
Mihai P.
0

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"

Nick Allen
sumber
4
Robot pintar dapat menjalankan javascript. Dengan melakukan solusi javascript Anda memblokir 99% robot meskipun
Ben Scheirman
Jika bot adalah plugin browser, ia akan dapat mengeksekusi javascript dan melihat hal-hal yang dilihat pengguna (bahkan jika Anda melakukan rendering flash atau webgl)
CoffeDeveloper
Cukup gunakan CSS untuk menempatkan bidang teks di atas halaman jika Anda khawatir JavaScript akan dinonaktifkan.
Chewie The Chorkie
0

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:

  • Salin "halo" di kotak samping
  • 1 + 1 =?
  • Salin nama situs web di dalam kotak

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.

Thibault Falise
sumber
Sebagai pengguna, saya benci omong kosong itu. Saya mendapatkan bahwa spam adalah sebuah masalah, tapi bagaimana ini menjadi masalah saya, sebagai pengguna situs? Spam komentar adalah masalah bagi pemilik situs, dan oleh karena itu, pengguna tidak perlu mengambil beban untuk mencegahnya. Jika Anda masuk ke toko dan diminta untuk mengenakan sepatu bot pelindung di atas sepatu Anda karena mereka tidak ingin mengepel, apa yang akan Anda pikirkan? Hanya butuh beberapa detik, tapi itu bukan beban Anda yang harus Anda tanggung.
Mike
Spam @ Miki membuat pemilik situs membuang-buang waktu. Waktu adalah uang, apa yang saya jual akan lebih mahal untukmu. Argumen Anda dapat dengan mudah digunakan untuk mengatakan bahwa "Saya tidak peduli Anda harus membayar sewa, saya ingin membayar biaya produksi + $ 1. Bagaimana Anda membayar sewa masalah saya". Ketika Anda membeli sesuatu Anda membayar untuk hosting, transportasi, waktu, dll.
Mihai P.
@ Mike - Ini masalah Anda karena Anda ingin formulir tersebut berfungsi (jelas, karena Anda sedang menggunakannya). Mesin menemukan bahkan situs yang paling tidak jelas dan akan mengirim spam puluhan ribu kiriman sehari, membuat formulir itu tidak dapat digunakan. Jadi, lain kali Anda mengirimkan pertanyaan ke bisnis kecil menggunakan formulir di situs web mereka dan Anda harus menambahkan 9 + 3 untuk melakukannya ... dan tanyakan pada diri Anda "mengapa saya harus melakukan ini?" jawaban Anda bisa jadi "karena saya benar-benar ingin jawaban atas pertanyaan saya".
Jimbo Jonny
@JimboJonny Anda benar-benar melewatkan maksud saya. Spam adalah masalah (seperti yang saya nyatakan), tetapi ada cara untuk mengatasinya di backend yang tidak mencemari pengalaman pengguna. Saat ini saya memiliki formulir kontak yang ditempatkan di lusinan (ratusan, bahkan) situs web, dan spam minimal (beberapa pesan spam sebulan, per formulir) karena saya telah menangani spam secara terprogram, bukan dengan membuat pengguna melewati rintangan. Maksud saya bukanlah bahwa spam bukanlah suatu masalah; itu IS sebuah masalah. Maksud saya adalah bahwa ada cara untuk mengatasinya tanpa memalsukan pengalaman pengguna.
Mike
@JimboJonny Contoh kasus, lihat peringkat tertinggi (dan diterima) jawaban atas pertanyaan ini. Tidak ada yang melibatkan input pengguna apa pun. Begitulah seharusnya mitigasi spam.
Mike
0

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.

Kolam
sumber
0

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.

matthew
sumber
0

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

h0mayun
sumber
Ide yang menarik! Apakah Anda pernah menggunakan ini di dunia nyata?
skybondsor
Ini tidak akan berhasil. Hari-hari ini para spammer menggunakan perangkat lunak yang berjalan di browser. Jadi mereka dapat meniru pengalaman pengguna yang membuat cookie dan kemudian menjalankannya sebanyak x kali menggunakan konten berbeda yang dibuat oleh perangkat lunak.
Norbert Norbertson
Ini tidak akan berfungsi jika pengguna tidak menggunakan mouse. Jika formulir Anda disiapkan dengan benar, pengguna harus dapat mengisi seluruh formulir menggunakan keyboard mereka. Anda dapat membuka tab ke bidang berikutnya, menggunakan bilah spasi untuk memilih tombol radio, dan menggunakan bilah spasi (atau enter) saat Anda menekan tombol kirim.
Kenny Johnson
0

Gunakan 1) formulir dengan token 2) Periksa formulir untuk penundaan formulir dengan alamat IP 3) Blokir IP (opsional)

Vivian
sumber
0

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)

Btw saya mencoba untuk tidak mengandalkan sesi untuk ini (seperti, menghitung berapa kali tombol diklik untuk mencegah kelebihan beban).

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)

CoffeDeveloper
sumber
0

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.

Robidu
sumber
0
  1. 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.

  2. Tambahkan verifikasi email. Pengguna menerima email dan dia perlu mengklik link. Jika tidak, buang postingan tersebut dalam beberapa waktu.

Kue kering
sumber
0

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

function formCheck(){
var timeStart; 
var timediff;

$("input").bind('click keyup', function () {
    timeStart = new Date().getTime();          
}); 
 timediff= Math.round((new Date().getTime() - timeStart)/1000);

  if(timediff < 3) { 
    //throw a warning or don't submit the form 
  } 
  else submit(); // some submit function

}
Harika Y
sumber
0

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.

nmit026
sumber
Karena penasaran, bagaimana perasaan Anda tentang reCAPTCHA? Anda adalah orang pertama yang menyebutkan layanan berbayar lainnya, tetapi bagaimana perbandingannya dengan reCAPTCHA, dan / atau mengapa Anda merekomendasikan layanan gratis tersebut LEBIH DARI?
Hawkeye
0

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

<form id="form01" action="false-action.php">
    //your inputs
    <button>SUBMIT</button>
</form>

JAVASCRIPT

$('#form01 button').click(function(){

   //your Validations and if everything is ok: 

    $('#form01').attr('action', 'correct-action.php').on("load",function(){
        document.getElementById('form01').submit()
    });
})

Saya kemudian menambahkan "callback" setelah .attr () untuk mencegah kesalahan.

Santi Nunez
sumber
-1

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.

MartinWebb
sumber