Menghentikan skrip untuk membanting situs web Anda


489

Saya telah menerima jawaban, tetapi sayangnya, saya percaya kita terjebak dengan skenario kasus terburuk kami yang asli: CAPTCHA semua orang yang mencoba membeli omong kosong . Penjelasan singkat: caching / web farms tidak memungkinkan untuk melacak hits, dan solusi apa pun (mengirim suar web tanpa cache, menulis ke tabel terpadu, dll.) Memperlambat situs lebih buruk daripada bot. Mungkin ada beberapa perangkat keras mahal dari Cisco atau sejenisnya yang dapat membantu pada tingkat tinggi, tetapi sulit untuk membenarkan biaya jika CAPTCHA semua orang adalah alternatif. Saya akan mencoba penjelasan yang lebih lengkap nanti, serta membersihkan ini untuk pencari masa depan (meskipun yang lain boleh mencoba, karena itu adalah wiki komunitas).

Situasi

Ini tentang penjualan tas sampah di woot.com. Saya adalah presiden dari Woot Workshop, anak perusahaan dari Woot yang melakukan desain, menulis deskripsi produk, podcast, posting blog, dan memoderasi forum. Saya bekerja dengan CSS / HTML dan saya hampir tidak terbiasa dengan teknologi lain. Saya bekerja sama dengan para pengembang dan telah membicarakan semua jawaban di sini (dan banyak ide lain yang kami miliki).

Kegunaan adalah bagian besar dari pekerjaan saya, dan membuat situs ini menarik dan menyenangkan adalah sebagian besar sisanya. Di situlah tiga tujuan di bawah ini berasal. CAPTCHA merusak kegunaan, dan bot mencuri kesenangan dan kegembiraan dari penjualan sampah kami.

Bot membanting halaman depan kami puluhan kali menggores layar kedua (dan / atau memindai RSS kami) untuk penjualan Random Crap. Saat mereka melihat itu, itu memicu tahap kedua dari program yang masuk, klik Saya ingin Satu, mengisi formulir, dan membeli omong kosong.

Evaluasi

lc : Pada stackoverflow dan situs lain yang menggunakan metode ini, mereka hampir selalu berurusan dengan pengguna yang terotentikasi (masuk), karena tugas yang dicoba mengharuskannya.

Pada Woot, pengguna anonim (non-log) dapat melihat halaman rumah kami. Dengan kata lain, bot slamming dapat tidak diautentikasi (dan pada dasarnya tidak dapat dilacak kecuali dengan alamat IP).

Jadi kita kembali ke pemindaian untuk IP, yang a) cukup tidak berguna di era cloud networking dan spambot zombie dan b) menangkap terlalu banyak orang tak berdosa mengingat jumlah bisnis yang berasal dari satu alamat IP (belum lagi masalah dengan ISP IP non-statis dan hit kinerja potensial untuk mencoba melacak ini).

Oh, dan meminta orang-orang menghubungi kami akan menjadi skenario yang paling buruk. Bisakah kami meminta mereka menghubungi Anda?

BradC : Metode Ned Batchelder terlihat sangat keren, tetapi mereka cukup kuat dirancang untuk mengalahkan bot yang dibangun untuk jaringan situs. Masalah kami adalah bot dibangun khusus untuk mengalahkan situs kami. Beberapa metode ini mungkin dapat bekerja untuk waktu yang singkat sampai skrip mengembangkan bot mereka untuk mengabaikan honeypot, screen-scrape untuk nama label terdekat, bukan id formulir, dan menggunakan kontrol browser yang mampu javascript.

 

lc lagi : "Kecuali, tentu saja, hype adalah bagian dari skema pemasaran Anda." Ya, tentu saja. Kejutan ketika barang itu muncul, serta kegembiraan jika Anda berhasil mendapatkannya mungkin sama atau lebih penting daripada omong kosong yang akhirnya Anda dapatkan. Apa pun yang menghilangkan first-come / first-serve merugikan sensasi 'memenangkan' omong kosong.

 

Novatrust : Dan aku, untuk satu, selamat datang tuan tuan baru kami. Kami benar-benar menawarkan Umpan RSS untuk memungkinkan aplikasi pihak ketiga memindai situs kami untuk info produk, tetapi tidak di depan HTML situs utama. Jika saya menafsirkannya dengan benar, solusi Anda memang membantu sasaran 2 (masalah kinerja) dengan sepenuhnya mengorbankan tujuan 1, dan hanya mengundurkan diri dari kenyataan bahwa bot akan membeli sebagian besar omong kosong. Saya memilih tanggapan Anda, karena pesimisme paragraf terakhir Anda terasa akurat bagi saya. Sepertinya tidak ada peluru perak di sini.

Sisa tanggapan umumnya bergantung pada pelacakan IP, yang, sekali lagi, tampaknya tidak berguna (dengan botnet / zombie / jaringan cloud) dan merugikan (menangkap banyak orang tak berdosa yang datang dari tujuan IP yang sama).

Ada pendekatan / ide lain? Pengembang saya terus mengatakan "mari kita lakukan CAPTCHA" tapi saya berharap ada metode yang kurang mengganggu untuk semua manusia yang sebenarnya ingin beberapa omong kosong kami.

Pertanyaan asli

Katakanlah Anda menjual sesuatu yang murah yang memiliki nilai persepsi yang sangat tinggi, dan Anda memiliki jumlah yang sangat terbatas. Tidak ada yang tahu persis kapan Anda akan menjual barang ini. Dan lebih dari satu juta orang secara teratur datang untuk melihat apa yang Anda jual.

Anda berakhir dengan skrip dan bot yang berupaya mencari [a] secara terprogram saat Anda menjual barang tersebut, dan [b] pastikan mereka termasuk orang pertama yang membelinya. Ini menyebalkan karena dua alasan:

  1. Situs Anda dibanting oleh bukan manusia, memperlambat segalanya untuk semua orang.
  2. Para penulis akhirnya 'memenangkan' produk, menyebabkan pelanggan tetap merasa dicurangi.

Solusi yang tampaknya jelas adalah membuat beberapa rintangan bagi pengguna Anda untuk melompati sebelum melakukan pemesanan, tetapi setidaknya ada tiga masalah dengan ini:

  • Pengalaman pengguna menyebalkan bagi manusia, karena mereka harus menguraikan CAPTCHA, memilih kucing, atau memecahkan masalah matematika.
  • Jika manfaat yang dirasakan cukup tinggi, dan kerumunan cukup besar, beberapa kelompok akan menemukan jalan mereka sendiri, yang mengarah ke perlombaan senjata. (Ini terutama benar, yang lebih sederhana adalah tweak; bentuk 'komentar' tersembunyi, mengatur ulang elemen bentuk, salah memberi label, teks tersembunyi 'gotcha' semua akan berfungsi satu kali dan kemudian perlu diubah untuk melawan penargetan bentuk khusus ini .)
  • Bahkan jika para skrip tidak dapat 'menyelesaikan' tweak Anda, itu tidak mencegah mereka membanting halaman depan Anda, dan kemudian membunyikan alarm untuk si skrip untuk mengisi pesanan, secara manual. Mengingat mereka mendapatkan keuntungan dari penyelesaian [a], mereka kemungkinan masih akan menang [b] karena mereka akan menjadi manusia pertama yang mencapai halaman pesanan. Selain itu, 1. masih terjadi, menyebabkan kesalahan server dan penurunan kinerja untuk semua orang.

Solusi lain adalah mengawasi IP yang sering terkena, memblokirnya dari firewall, atau mencegah mereka memesan. Ini bisa menyelesaikan 2. dan mencegah [b] tetapi performa yang dihasilkan dari pemindaian untuk IP sangat besar dan kemungkinan akan menyebabkan lebih banyak masalah seperti 1. daripada yang disebabkan oleh skrip sendiri. Selain itu, kemungkinan jaringan cloud dan spambot zombie membuat pemeriksaan IP tidak berguna.

Gagasan ketiga, memaksa formulir pesanan dimuat untuk beberapa waktu (katakanlah, setengah detik) akan berpotensi memperlambat kemajuan pesanan cepat, tetapi sekali lagi, para penulis naskah akan tetap menjadi orang pertama di, dengan kecepatan apa pun yang tidak merugikan pengguna sebenarnya.

Tujuan

  1. Jual item ke manusia yang bukan scripting.
  2. Biarkan situs berjalan pada kecepatan yang tidak diperlambat oleh bot.
  3. Jangan ganggu para pengguna 'normal' dengan tugas yang harus diselesaikan untuk membuktikan bahwa mereka manusia.

1
Saya pikir Anda memiliki tujuan yang bertentangan: Menjaga pengalaman persis seperti itu tetapi menyingkirkan bot. Saya pikir Anda tidak bisa mendapatkan yang satu tanpa mengorbankan bagian yang lain.
Maks

Ini adalah wiki komunitas, jadi jangan ragu untuk menikam, tetapi saya kebanyakan berusaha untuk membahas setiap poin sejelas yang saya bisa mengingat ada hal-hal yang jelas untuk dicoba yang telah kami coba dan diskon.
Dave Rutledge

Mengapa tidak hanya me-cache pelanggar berulang, cukup jangan perbarui halaman apa pun yang mereka minta berulang kali. Alamat IPv4 dan MAC adalah total 32 + 48 bit. Itu 10MB untuk 1 juta pengguna, seharusnya tidak menjadi masalah. Kombinasi IPv4 dan MAC akan membantu Anda melacak semua jenis pengguna dengan lebih akurat
31830 John Leidegren

4
Saya tidak begitu mengerti mengapa Anda harus membiarkan pengguna anonim melihat penjualan sampah. Mengapa tidak hanya menawarkannya kepada pengguna yang login? Jika Anda melakukannya, Anda tidak akan memiliki pengguna yang tidak dikenal terlalu sering memukul halaman dan kemudian dapat melarang pengguna yang buruk.
Ryan Guill

1
Saya pikir beberapa orang kehilangan faktor kunci di sini: bot ini diatur untuk masuk dan membeli juga. Mereka TIDAK tahu akun yang valid dan BISA login. Juga, orang-orang nyata yang menggunakan woot duduk di sana saat item akan muncul dan tekan F5 untuk memuat ulang setiap 2-5 detik. Itu adalah penggunaan normal manusia.
CodingWithSpike

Jawaban:


229

Bagaimana dengan mengimplementasikan sesuatu seperti SO dengan CAPTCHA?

Jika Anda menggunakan situs secara normal, Anda mungkin tidak akan pernah melihatnya. Jika Anda terlalu sering memuat ulang halaman yang sama, memposting komentar berturut-turut terlalu cepat, atau sesuatu yang memicu alarm, buat mereka membuktikan bahwa mereka adalah manusia. Dalam kasus Anda, ini mungkin akan memuat ulang secara konstan dari halaman yang sama, mengikuti setiap tautan pada halaman dengan cepat, atau mengisi formulir pemesanan yang terlalu cepat untuk menjadi manusia.

Jika mereka gagal memeriksa x kali berturut-turut (katakanlah, 2 atau 3), berikan batas waktu IP itu atau ukuran lainnya. Kemudian di akhir waktu tunggu, buang mereka kembali ke cek.


Karena Anda memiliki pengguna yang tidak terdaftar mengakses situs ini, Anda hanya memiliki IP untuk melanjutkan. Anda dapat mengeluarkan sesi untuk setiap browser dan melacaknya jika Anda mau. Dan, tentu saja, beri tanda cek pada manusia jika terlalu banyak sesi dibuat (kembali) secara berurutan (seandainya bot terus menghapus cookie).

Sejauh menangkap terlalu banyak orang tak berdosa, Anda dapat memasang sangkalan pada halaman cek manusia: "Halaman ini juga dapat muncul jika terlalu banyak pengguna anonim melihat situs kami dari lokasi yang sama. Kami menganjurkan Anda untuk mendaftar atau masuk untuk menghindari ini." (Sesuaikan kata-kata dengan tepat.)

Selain itu, apa peluang X orang memuat halaman yang sama secara bersamaan dari satu IP? Jika tinggi, mungkin Anda memerlukan mekanisme pemicu yang berbeda untuk alarm bot Anda.


Sunting: Pilihan lain adalah jika mereka gagal berkali-kali, dan Anda yakin tentang permintaan produk, untuk memblokir mereka dan membuat mereka secara pribadi CALL Anda untuk menghapus blokir.

Memiliki panggilan orang memang tampak seperti ukuran bodoh, tapi itu memastikan ada manusia di suatu tempat di belakang komputer . Kuncinya adalah memiliki blok hanya di tempat untuk suatu kondisi yang hampir tidak pernah terjadi kecuali itu bot (misalnya gagal memeriksa beberapa kali berturut-turut). Maka MEMASUK interaksi manusia - untuk mengangkat telepon.

Menanggapi komentar mereka memanggil saya, jelas ada tradeoff di sini. Apakah Anda cukup khawatir tentang memastikan pengguna Anda manusia untuk menerima beberapa panggilan telepon ketika mereka mulai dijual? Jika saya begitu khawatir tentang produk yang sampai ke pengguna manusia, saya harus membuat keputusan ini, mungkin mengorbankan sedikit waktu saya dalam proses.

Karena sepertinya Anda bertekad untuk tidak membiarkan bot menguasai situs Anda, saya yakin telepon mungkin merupakan pilihan yang baik. Karena saya tidak mendapat untung dari produk Anda, saya tidak tertarik menerima panggilan ini. Namun, jika Anda berbagi sebagian dari keuntungan itu, saya mungkin tertarik. Karena ini adalah produk Anda, Anda harus memutuskan seberapa besar Anda peduli dan menerapkannya.


Cara lain untuk melepaskan blok tidak begitu efektif: batas waktu (tetapi mereka akan membanting situs Anda lagi setelah itu, bilas berulang), batas waktu yang lama (jika itu benar-benar manusia yang mencoba membeli produk Anda, mereka akan SOL dan dihukum karena gagal cek), email (mudah dilakukan oleh bot), faks (sama), atau surat siput (terlalu lama).

Anda bisa, tentu saja, alih-alih memiliki periode batas waktu meningkat per IP untuk setiap kali mereka mendapat batas waktu. Pastikan Anda tidak menghukum manusia sejati secara tidak sengaja.


13
Google menggunakan pendekatan yang sama ini, dan mereka hanya memiliki alamat IP untuk melanjutkan. Sering di tempat kerja saya akan mendapatkan CAPTCHA sebelum saya dapat mencari di Google karena mereka melihat perilaku bot-seperti dari alamat IP yang sama. Saya pikir pendekatan ini (CAPTCHA setelah perilaku bot-like) adalah yang terbaik yang akan Anda dapatkan.
Ross

7
Saya sudah pernah meminta google kepada saya untuk CAPTCHA sebelumnya, tetapi itu adalah kesalahan saya sendiri - Saya menggunakannya sebagai kalkulator, melakukan lusinan jumlah yang hampir sama.
Marcus Downing

Opsi CAPTCHA terdengar seperti pemenang bagi saya. Anda melukai bot dengan keras dan jika seimbang Anda seharusnya tidak pernah menghalangi pengguna Anda yang sah.
xan

Alih-alih mengunci orang dan menggunakan panggilan telepon, dapatkah Anda menghasilkan alamat email sementara seperti cur92Siva@site.com, tetapi menghasilkan bagian depan dengan gambar.
Sam

Itu mungkin bekerja juga, kecuali bot terbiasa dengan sistem dan dapat menyaring-mengikis alamat email. Maksud saya dengan panggilan telepon itu sebenarnya memaksa interaksi manusia dan mengharuskan pengguna untuk menjelaskan diri mereka secara langsung dengan suara mereka. Pemilik bot mungkin tidak ingin melakukan itu.
lc.

193

Anda perlu mencari cara untuk membuat bot membeli barang-barang yang terlalu mahal: 12mm wingnut: $ 20. Lihat berapa banyak bot yang diambil sebelum penulis skrip memutuskan Anda mem-game-kannya.

Gunakan keuntungan untuk membeli lebih banyak server dan membayar bandwidth.


12
Bagaimana jika mereka kemudian mengembalikan barang atau mengeluarkan tolak bayar? Ini bisa berakhir dengan biaya Anda dan tolak bayar dapat merugikan bisnis Anda dengan pemroses kartu kredit. Bot juga kemungkinan menggunakan kartu curian, tetapi itu dapat memperburuk tingkat tolak bayar karena jumlah yang lebih tinggi akan lebih sering ditantang.
Tai Squared

13
Jangan menagih mereka, tetapi tandai sebagai bot, khusus untuk mencoba membeli item. Jika ada orang yang membeli item palsu, maka tandai saja sebagai bot, dan larang. Anda mungkin bisa mengunci mereka selama beberapa jam.
Kibbee

4
Ini memiliki nilai komedi yang serius, sampai Anda marah script-kiddie yang kebetulan memiliki lebih banyak keterampilan daripada hanya mengais, dan menyebabkan Anda masalah nyata karena Anda merobeknya.
MattBelanger

2
Jika script kiddie marah, mereka mungkin akan mengekspos diri mereka cukup bagi Anda untuk menandai mereka dan menyerahkannya kepada penegak hukum.
Jacco

9
sqook: ini bukan solusi teknologi, tetapi solusi dunia nyata. Menempatkan penjaga keamanan dengan senjata di bank adalah hal yang sama. Ini mungkin kelihatan berhidung keras, tetapi juga para penjahat, jadi jadilah berhidung keras. Luka mereka di tempat yang menyakitkan sampai mereka berhenti.
Christopher Mahan

162

Solusi saya adalah membuat goresan layar menjadi tidak berharga dengan menunda sekitar 10 menit untuk 'bot dan skrip.

Begini cara saya melakukannya:

  • Log dan identifikasi pemukul berulang.

Anda tidak perlu mencatat setiap alamat IP pada setiap klik. Hanya lacak satu dari setiap 20 hit atau lebih. Pelaku berulang akan tetap muncul dalam pelacakan acak sesekali.

  • Simpan cache halaman Anda dari sekitar 10 menit sebelumnya.

  • Ketika pemukul berulang / bot menghantam situs Anda, beri mereka halaman cache lama 10 menit.

Mereka tidak akan segera tahu bahwa mereka mendapatkan situs lama. Mereka akan dapat mengikisnya, dan segalanya, tetapi mereka tidak akan memenangkan perlombaan lagi, karena "orang sungguhan" akan memiliki 10 menit lebih awal.

Manfaat:

  • Tidak ada kerumitan atau masalah bagi pengguna (seperti CAPTCHA).
  • Diimplementasikan sepenuhnya pada sisi server. (tidak ada ketergantungan pada Javascript / Flash)
  • Menayangkan laman yang lebih lama dan di-cache harus kurang intensif kinerja daripada laman langsung. Anda sebenarnya dapat mengurangi beban pada server Anda dengan cara ini!

Kekurangannya

  • Membutuhkan pelacakan beberapa alamat IP
  • Membutuhkan menjaga dan memelihara cache dari halaman yang lebih lama.

Bagaimana menurut anda?


1
Sial. Saya hanya menghabiskan waktu satu setengah jam untuk menulis skema lima vektor saya sendiri untuk woot, dan setelah berpikir panjang dan keras atas penanggulangan kelima saya (sebuah botnet throttle), saya harus mengakui kekalahan. Itu tidak bekerja. Dan sisa solusi saya selama satu jam adalah - yah, yang ini. abelenky, saya ujung topi untuk Anda
Jens Roland

7
Untuk membangun di atas ini: Masukkan IP ke dalam hash penghitungan LRU dalam memori (kenaikan dan tekan ke atas setiap kali IP kembali). Tambahkan heuristik berdasarkan info IP terbalik, aktivitas, unduhan gambar / js / cookie. Skala respons Anda dengan seberapa buruk serangan itu, meminimalkan konsekuensi negatif palsu.
SquareCog

1
(lanjutan :) Dan teknik saya tidak mematikan / melarang siapa pun. Itu hanya memberi mereka informasi yang tertunda. Tidak seorang pun di kantor dapat memenangkan hadiah, tetapi itu tidak banyak masalah dari sudut pandang layanan pelanggan / aksesibilitas.
abelenky

18
@bruceatk: Jika Anda memberi mereka halaman khusus bot, mereka pada akhirnya akan belajar mendeteksinya, dan belajar untuk menipu klien biasa dengan lebih akurat. Dengan memberikan halaman lama, mereka tidak akan memiliki IDEA bahwa mereka menerima data lama. Data lama sah! Tidak ada gunanya untuk tujuan kontes / balapan.
abelenky

1
Terima kasih banyak untuk mereka yang mendukung ide saya. Meskipun hadiahnya sudah lewat, saya pikir ide ini memiliki banyak manfaat dalam hal lebih mudah diimplementasikan daripada captcha, kecil kemungkinannya untuk melecehkan manusia, dan lebih mungkin menggagalkan bot. Saya harap seseorang mencoba ini di beberapa situs web.
abelenky

54

Lihatlah artikel ini oleh ned Batchelder di sini . Artikelnya adalah tentang menghentikan robot spam, tetapi teknik yang sama dapat dengan mudah diterapkan ke situs Anda.

Daripada menghentikan bot dengan membuat orang mengidentifikasi diri mereka sendiri, kita dapat menghentikan bot dengan membuat mereka sulit untuk membuat pos yang sukses, atau dengan membuat mereka secara tidak sengaja mengidentifikasi diri mereka sebagai bot. Ini menghilangkan beban dari orang-orang, dan meninggalkan bentuk komentar bebas dari tindakan anti-spam yang terlihat.

Teknik ini adalah bagaimana saya mencegah robot spam di situs ini. Berhasil. Metode yang dijelaskan di sini tidak melihat konten sama sekali.

Beberapa ide lain:

  • Buat mekanisme pemberitahuan otomatis resmi (umpan RSS? Twitter?) Yang dapat dilanggan orang ketika produk Anda dijual. Ini mengurangi kebutuhan orang untuk membuat skrip.
  • Ubah teknik kebingungan Anda tepat sebelum barang baru mulai dijual. Jadi, bahkan jika para penulis naskah dapat meningkatkan perlombaan senjata, mereka selalu ketinggalan satu hari.

SUNTING: Agar sepenuhnya jelas, artikel Ned di atas menjelaskan metode untuk mencegah PEMBELIAN item secara otomatis dengan mencegah BOT dari melalui formulir untuk mengirimkan pesanan. Teknik-tekniknya tidak akan berguna untuk mencegah bot menggaruk layar beranda untuk menentukan kapan Bandoleer of Carrots muncul untuk dijual. Saya tidak yakin mencegah ITU benar-benar mungkin.

Berkenaan dengan komentar Anda tentang efektivitas strategi Ned: Ya, dia membahas honeypots, tapi saya tidak berpikir itu strategi terkuatnya. Pembahasannya tentang SPINNER adalah alasan asli saya menyebutkan artikelnya. Maaf saya tidak membuatnya lebih jelas dalam posting asli saya:

Spinner adalah bidang tersembunyi yang digunakan untuk beberapa hal: ia memadukan sejumlah nilai yang mencegah gangguan dan replay, dan digunakan untuk mengaburkan nama bidang. Spinner adalah hash MD5 dari:

  • Stempel waktu,
  • Alamat IP klien,
  • ID entri dari entri blog sedang dikomentari, dan
  • Sebuah rahasia.

Inilah cara Anda dapat mengimplementasikannya di WOOT.com:

Ubah nilai "rahasia" yang digunakan sebagai bagian dari hash setiap kali item baru dijual. Ini berarti bahwa jika seseorang akan merancang BOT untuk membeli barang secara otomatis, itu hanya akan berfungsi sampai barang berikutnya dijual !!

Bahkan jika seseorang dapat dengan cepat membangun kembali bot mereka, semua pengguna aktual lainnya akan sudah membeli BOC, dan masalah Anda terpecahkan!

Strategi lain yang ia diskusikan adalah mengubah teknik honeypot dari waktu ke waktu (sekali lagi, ubah ketika item baru mulai dijual):

  • Gunakan kelas CSS (tentu saja secara acak) untuk mengatur bidang atau elemen yang mengandung untuk ditampilkan: tidak ada.
  • Warnai bidang yang sama (atau sangat mirip dengan) latar belakang halaman.
  • Gunakan penentuan posisi untuk memindahkan bidang dari area halaman yang terlihat.
  • Buat elemen terlalu kecil untuk menampilkan bidang honeypot yang ada.
  • Biarkan bidang terlihat, tetapi gunakan posisi untuk menutupinya dengan elemen yang tidak jelas.
  • Gunakan Javascript untuk mempengaruhi semua perubahan ini, membutuhkan bot untuk memiliki mesin Javascript penuh.
  • Biarkan honeypots ditampilkan seperti bidang lainnya, tetapi beri tahu orang untuk tidak memasukkan apa pun ke dalamnya.

Saya kira ide keseluruhan saya adalah untuk MENGUBAH DESAIN FORMULIR ketika setiap item baru mulai dijual. Atau setidaknya, ubah ketika Dewan Komisaris baru mulai dijual.

Yang mana, beberapa kali / bulan?

Jika Anda menerima jawaban ini, apakah Anda akan memberi saya informasi kapan jawaban berikutnya akan jatuh tempo? :)


+1 untuk RSS. Buat agar pengguna yang sah diberi hadiah.
Marcus Downing

RSS tampaknya merupakan solusi yang baik, tetapi mungkin itu merugikan pendapatan iklan yang saya duga tergantung pada situs ini?
TM.

1
Saya tidak begitu mengerti konsep "pemintal". Apakah ini hanya sepotong data tambahan yang ditempatkan di dalam html <form>dan dikirim setelah pengiriman? Karena bot dapat dengan mudah mengikisnya juga.
Ponkadoodle

44

T: Bagaimana Anda menghentikan skrip membanting situs Anda ratusan kali per detik?
A: Tidak. Tidak ada cara untuk mencegah perilaku ini oleh agen eksternal.

Anda dapat menggunakan beragam teknologi untuk menganalisis permintaan yang masuk dan berusaha secara heuristik untuk menentukan siapa dan bukan manusia ... tetapi itu akan gagal. Akhirnya, jika tidak segera.

Satu-satunya solusi jangka panjang yang layak adalah mengubah gim agar situs tidak ramah bot, atau kurang menarik bagi para skrip.

Bagaimana kamu melakukannya? Nah, itu pertanyaan yang berbeda! ;-)

...

OK, beberapa opsi telah diberikan (dan ditolak) di atas. Saya tidak terlalu akrab dengan situs Anda, setelah melihatnya hanya sekali, tetapi karena orang dapat membaca teks dalam gambar dan bot tidak dapat dengan mudah melakukan ini, ubah pengumuman menjadi gambar. Bukan CAPTCHA , hanya gambar -

  • menghasilkan gambar (di-cache tentu saja) ketika halaman diminta
  • menjaga nama sumber gambar tetap sama, sehingga tidak memberikan permainan
  • sebagian besar waktu gambar akan memiliki teks biasa di dalamnya, dan disejajarkan agar tampak menjadi bagian dari halaman HTML inline
  • saat game 'on', gambar berubah menjadi teks pengumuman
  • teks pengumuman mengungkapkan url dan / atau kode yang harus dimasukkan secara manual untuk mendapatkan hadiah. CAPTCHA kode jika Anda suka, tapi itu mungkin tidak perlu.
  • untuk keamanan tambahan, kode dapat berupa token satu kali yang dibuat khusus untuk permintaan / IP / agen, sehingga permintaan yang berulang menghasilkan kode yang berbeda. Atau Anda dapat pra-menghasilkan banyak kode acak (satu kali pad) jika pembuatan berdasarkan permintaan terlalu melelahkan.

Jalankan uji coba waktu orang-orang nyata yang merespons hal ini, dan abaikan ('oops, terjadi kesalahan, maaf! Coba lagi') respons lebih cepat daripada (katakanlah) separuh dari waktu ini. Acara ini juga harus memicu peringatan kepada pengembang bahwa setidaknya satu bot telah menemukan kode / permainan, jadi inilah saatnya untuk mengubah kode / permainan.

Tetap mengubah permainan secara berkala, bahkan jika tidak ada bot yang memicunya, hanya membuang waktu para penulis. Akhirnya skrip harus bosan dengan permainan dan pergi ke tempat lain ... kami harap ;-)

Satu saran terakhir: ketika permintaan untuk halaman utama Anda masuk, masukkan ke dalam antrian dan tanggapi permintaan secara berurutan (Anda mungkin harus meretas / memperluas server web untuk melakukan ini, tetapi kemungkinan akan menjadi bermanfaat). Jika permintaan lain dari IP / agen yang sama masuk saat permintaan pertama dalam antrian, abaikan saja. Ini akan secara otomatis melepaskan beban dari bot.

EDIT: opsi lain, selain menggunakan gambar, adalah menggunakan javascript untuk mengisi teks beli / tidak-beli; bot jarang menafsirkan javascript, sehingga mereka tidak akan melihatnya


1
Saya akan memastikan bahwa "teks default" juga berubah. Ini akan mencegah aplikasi pengikisan dari hanya membandingkan gambar dengan gambar sebelumnya dan menunggu perubahan yang signifikan. +1. Ide yang hebat.
Frank Krueger

1
Amandemen "saran akhir": Jika permintaan kedua datang dari alamat sementara permintaan sebelumnya dari alamat yang sama tertunda, buang permintaan pertama dan masukkan yang kedua dalam antrian. Ini akan bertindak sebagai penalti karena memalu situs alih-alih membiarkan halaman dimuat.
Dave Sherohman

@ [Frank Krueger]: saya pikir saya menyiratkan ini, tetapi setelah membaca ulang saya rasa saya tidak - terima kasih untuk menunjukkannya! Mungkin juga berguna untuk mengubah gambar teks standar hanya beberapa piksel untuk mengacaukan perbandingan, dan / atau menghasilkan teks bergaya watermark yang hampir tak terlihat untuk lebih mengacaukan bot
Steven A. Lowe

@ [Dave Sherohman]: Anda bisa, tetapi itu mungkin menyebabkan antrian bergolak; mungkin lebih baik hanya membuang permintaan baru untuk segera mencopot beban - pengujian / profiling akan memastikan yang mana yang lebih baik, tetapi terima kasih atas saran yang bagus!
Steven A. Lowe

Tidak tahan kalau Anda menyuruhnya menyerah, saya tahu Anda pikir itu tidak mungkin, tapi saya tidak setuju. Jika ada kemauan, pasti selalu ada jalan. Membiarkan kekalahan dengan mudah benar-benar tidak membangkitkan semangat dan menyedihkan, jika poster asli dibaca, itu mungkin dilakukan, tetapi solusinya harus dirancang khusus setelah analisis log lalu lintas, Anda dapat mencegah metode saat ini dan bukti di masa depan untuk mencegahnya. metode yang tidak digunakan. Juga JavaScript, kontrol webbrowser menjalankan JavaScript secara real time, tidak perlu mesin lain - mereka dapat mengacaukan Dom dan menjalankan JavaScript mereka sendiri! Opps
Erx_VB.NExT.Coder

30

Saya tidak tahu bagaimana layaknya ini: ... terus menyerang.

Cari tahu data apa yang sedang dipindai oleh bot. Beri mereka data yang mereka cari saat Anda TIDAK menjual omong kosong. Lakukan ini dengan cara yang tidak akan mengganggu atau membingungkan pengguna manusia. Ketika bot memicu fase dua, mereka akan masuk dan mengisi formulir untuk membeli $ 100 roombas daripada BOC. Tentu saja, ini mengasumsikan bahwa bot tidak terlalu kuat.

Gagasan lainnya adalah menerapkan penurunan harga secara acak selama periode penjualan kantong sampah. Siapa yang akan membeli tas acak seharga $ 150 ketika Anda MENYATAKAN NEGARA bahwa itu hanya bernilai $ 20? Bot tidak ada tapi bersemangat. Tapi 9 menit kemudian $ 35 dolar ... lalu 17 menit kemudian $ 9. Atau terserah.

Tentu, raja zombie akan bisa bereaksi. Intinya adalah membuat kesalahan mereka menjadi sangat mahal bagi mereka (dan membuat mereka membayar Anda untuk melawan mereka).

Semua ini mengasumsikan Anda ingin mengencingi beberapa tuan bot, yang mungkin tidak 100% disarankan.


Jangan berpikir mengecewakan para bot bot itu diinginkan, tetapi Anda punya ide yang menarik di sini.
Shawn Miller

7
Saya setuju, dan saya menyukai ide yang berulang ini untuk membodohi bot agar melakukan pembelian palsu. Ini pengembalian, dan karena mereka sudah melanggar ToS, mereka hampir tidak bisa mengeluh.
Nicholas Flynt

22

Jadi masalahnya adalah: bot menginginkan "tasnya" karena memiliki nilai persepsi tinggi dengan harga persepsi rendah. Anda kadang-kadang menawarkan barang ini dan bot mengintai, menunggu untuk melihat apakah itu tersedia dan kemudian mereka membeli barang.

Karena sepertinya pemilik bot mendapatkan untung (atau berpotensi menghasilkan untung), triknya adalah membuat ini tidak menguntungkan bagi mereka dengan mendorong mereka untuk membeli sampah.

Pertama, selalu menawarkan "tas 'omong kosong".

Kedua, pastikan omong kosong itu biasanya omong kosong.

Ketiga, putar omong kosong sesering mungkin.

Sederhana bukan?

Anda akan membutuhkan kata permanen "mengapa omong kosong kami terkadang omong kosong?" tautan di sebelah penawaran untuk menjelaskan kepada manusia apa yang terjadi.

Ketika bot melihat bahwa ada omong kosong dan omong kosong itu dibeli secara otomatis, penerima akan sangat kecewa bahwa mereka telah membayar $ 10 untuk tusuk gigi yang rusak. Dan kemudian kantong sampah kosong. Dan kemudian beberapa kotoran dari bagian bawah sepatu Anda.

Jika mereka membeli cukup dari omong kosong ini dalam waktu yang relatif singkat (dan Anda memiliki penolakan besar di semua tempat menjelaskan mengapa Anda melakukan ini), mereka akan kehilangan "tas 'uang tunai" pada Anda " tas 'o omong kosong ". Bahkan campur tangan manusia di pihak mereka (memeriksa untuk memastikan bahwa omong kosong itu bukan omong kosong) dapat gagal jika Anda cukup sering memutar omong kosong itu. Heck, mungkin bot akan memperhatikan dan tidak membeli apa pun yang sudah di rotasi untuk waktu yang terlalu singkat, tetapi itu berarti manusia akan membeli non-omong kosong.

Heck, pelanggan reguler Anda mungkin sangat geli sehingga Anda dapat mengubahnya menjadi kemenangan pemasaran yang besar. Mulai memposting berapa banyak "omong kosong" ikan mas yang dijual. Orang akan kembali hanya untuk melihat seberapa keras bot telah digigit.

Pembaruan: Saya berharap Anda mungkin mendapat beberapa panggilan di depan dengan orang-orang mengeluh. Saya tidak berpikir Anda bisa menghentikan itu sepenuhnya. Namun, jika ini membunuh bot, Anda selalu dapat menghentikannya dan memulai kembali nanti.


15
  1. Jual item ke manusia yang bukan scripting.

  2. Biarkan situs berjalan pada kecepatan yang tidak diperlambat oleh bot.

  3. Jangan ganggu para pengguna 'normal' dengan tugas yang harus diselesaikan untuk membuktikan bahwa mereka manusia.

Anda mungkin tidak ingin mendengar ini, tetapi # 1 dan # 3 saling eksklusif.

Di Internet, tidak ada yang tahu Anda seekor anjing

Yah, tidak ada yang tahu kau juga bot. Tidak ada cara terprogram untuk mengetahui apakah ada manusia di ujung sambungan tanpa mengharuskan orang itu melakukan sesuatu. Mencegah skrip / bot melakukan hal-hal di web adalah alasan utama CAPTCHA ditemukan. Ini tidak seperti ini adalah beberapa masalah baru yang belum melihat banyak upaya yang dikeluarkan untuk itu. Jika ada cara yang lebih baik untuk melakukannya, yang tidak melibatkan kerumitan bagi pengguna nyata yang dilakukan CAPTCHA, semua orang sudah akan menggunakannya.

Saya pikir Anda perlu menghadapi kenyataan bahwa jika Anda ingin menjaga bot dari halaman pemesanan Anda, CAPTCHA yang baik adalah satu-satunya cara untuk melakukannya. Jika permintaan untuk omong kosong acak Anda cukup tinggi sehingga orang-orang bersedia melakukan sejauh ini untuk mendapatkannya, pengguna yang sah tidak akan ditunda oleh CAPTCHA.


Memberi +1 untuk jika mereka menginginkannya, captcha tidak akan menghentikan mereka ... dan untuk kartun.
Martin

13

Metode yang digunakan Woot untuk memerangi masalah ini adalah mengubah gim - secara harfiah. Ketika mereka menyajikan barang yang sangat diinginkan untuk dijual, mereka membuat pengguna memainkan video game untuk memesannya.

Tidak hanya itu berhasil memerangi bot (mereka dapat dengan mudah membuat perubahan kecil pada permainan untuk menghindari pemain otomatis, atau bahkan memberikan permainan baru untuk setiap penjualan) tetapi juga memberikan kesan kepada pengguna "memenangkan" item yang diinginkan sambil memperlambat proses pemesanan.

Itu masih menjual sangat cepat, tapi saya pikir solusinya baik - mengevaluasi kembali masalah dan mengubah parameter mengarah pada strategi yang sukses di mana solusi teknis yang ketat tidak ada.


Seluruh model bisnis Anda didasarkan pada "pertama datang, pertama dilayani". Anda tidak dapat melakukan apa yang dilakukan stasiun radio (mereka tidak lagi menjadikan penelepon pertama sebagai pemenang, mereka menjadikan penelepon ke-5 atau ke-20 atau ke-13 menjadi pemenang) - ini tidak cocok dengan fitur utama Anda.

Tidak, tidak ada cara untuk melakukan ini tanpa mengubah pengalaman pemesanan untuk pengguna nyata.

Katakanlah Anda menerapkan semua taktik ini. Jika saya memutuskan bahwa ini penting, saya hanya akan membuat 100 orang bekerja dengan saya, kami akan membangun perangkat lunak untuk bekerja pada 100 komputer kami yang terpisah, dan mengenai situs Anda 20 kali per detik (5 detik antara akses untuk setiap pengguna / cookie / akun / alamat IP).

Anda memiliki dua tahap:

  1. Menonton halaman depan
  2. Memerintah

Anda tidak dapat memasang captcha memblokir # 1 - itu akan kehilangan pelanggan nyata ("Apa? Saya harus memecahkan captcha setiap kali saya ingin melihat woot terbaru?!?").

Jadi grup kecil saya menonton, menghitung waktu bersama sehingga kami mendapat sekitar 20 cek per detik, dan siapa pun yang melihat perubahan akan memberi tahu semua yang lain (secara otomatis), yang akan memuat halaman depan sekali lagi, ikuti tautan pesanan, dan lakukan transaksi ( yang mungkin juga terjadi secara otomatis, kecuali jika Anda menerapkan captcha dan mengubahnya untuk setiap wootoff / boc).

Anda dapat menempatkan captcha di depan # 2, dan saat Anda enggan melakukannya, itu mungkin satu-satunya cara untuk memastikan bahwa meskipun bot menonton halaman depan, pengguna sungguhan mendapatkan produk.

Tetapi bahkan dengan captcha, band kecil saya yang berjumlah 100 tetap memiliki keunggulan penggerak pertama yang signifikan - dan tidak mungkin Anda dapat mengatakan bahwa kami bukan manusia. Jika Anda mulai menghitung waktu akses kami, kami hanya akan menambahkan beberapa jitter. Kami dapat secara acak memilih komputer mana yang akan disegarkan sehingga urutan akses berubah secara konstan - tetapi masih terlihat cukup seperti manusia.

Pertama, singkirkan bot sederhana

Anda perlu memiliki firewall adaptif yang akan mengawasi permintaan dan jika seseorang melakukan hal bodoh yang jelas - menyegarkan lebih dari satu kali per detik pada IP yang sama, maka gunakan taktik untuk memperlambatnya (paket drop, kirim kembali ditolak atau 500 kesalahan, dll. ).

Ini akan secara signifikan menurunkan traffic Anda dan mengubah taktik yang digunakan pengguna bot.

Kedua, buat server sangat cepat.

Anda benar-benar tidak ingin mendengar ini ... tapi ...

Saya pikir yang Anda butuhkan adalah solusi sepenuhnya khusus dari bawah ke atas.

Anda tidak perlu dipusingkan dengan tumpukan TCP / IP, tetapi Anda mungkin perlu mengembangkan server khusus yang sangat, sangat, sangat cepat yang dibuat khusus untuk mengkorelasikan koneksi pengguna dan bereaksi dengan tepat terhadap berbagai serangan.

Apache, lighthttpd, dll semuanya bagus untuk menjadi fleksibel, tetapi Anda menjalankan situs web tujuan tunggal, dan Anda benar-benar harus dapat melakukan lebih dari yang mampu dilakukan server saat ini (baik dalam menangani lalu lintas, dan dalam memerangi bot secara tepat ).

Dengan melayani laman web yang sebagian besar statis (diperbarui setiap 30 detik atau lebih) di server khusus, Anda seharusnya tidak hanya mampu menangani 10x jumlah permintaan dan lalu lintas (karena server tidak melakukan apa pun selain mendapatkan permintaan, dan membaca halaman dari memori ke buffer TCP / IP) tetapi itu juga akan memberi Anda akses ke metrik yang mungkin membantu Anda memperlambat bot. Misalnya, dengan menghubungkan alamat IP Anda hanya dapat memblokir lebih dari satu koneksi per detik per IP. Manusia tidak bisa lebih cepat dari itu, dan bahkan orang yang menggunakan alamat IP NATed yang sama hanya akan jarang diblokir. Anda ingin melakukan pemblokiran lambat - biarkan koneksi sendirian selama satu detik penuh sebelum secara resmi mengakhiri sesi. Ini dapat dimasukkan ke firewall untuk memberikan blok jangka panjang untuk pelanggar terutama mengerikan.

Tetapi kenyataannya adalah bahwa apa pun yang Anda lakukan, tidak ada cara untuk membedakan manusia dari bot ketika bot dibuat khusus oleh manusia untuk satu tujuan. Bot hanyalah proxy untuk manusia.

Kesimpulan

Pada akhirnya, Anda tidak dapat membedakan manusia dan komputer untuk menonton halaman depan. Anda dapat menghentikan bot pada langkah pemesanan, tetapi pengguna bot masih memiliki keunggulan penggerak pertama, dan Anda masih memiliki banyak beban untuk dikelola.

Anda dapat menambahkan blok untuk bot sederhana, yang akan menaikkan bilah dan lebih sedikit orang yang peduli dengannya. Itu mungkin cukup.

Tetapi tanpa mengubah model dasar Anda, Anda tidak beruntung. Yang terbaik yang dapat Anda lakukan adalah menangani kasus-kasus sederhana, membuat server jadi pengguna biasa yang cepat tidak menyadarinya, dan menjual begitu banyak item bahkan jika Anda memiliki beberapa juta bot, sebanyak mungkin pengguna biasa yang menginginkannya akan mendapatkannya .

Anda mungkin mempertimbangkan untuk menyiapkan honeypot dan menandai akun pengguna sebagai pengguna bot, tetapi itu akan memiliki reaksi negatif komunitas yang sangat besar.

Setiap kali saya memikirkan "baik, bagaimana dengan melakukan ini ..." Saya selalu bisa mengatasinya dengan strategi bot yang cocok.

Bahkan jika Anda menjadikan halaman depan sebagai captcha untuk sampai ke halaman pemesanan ("Tombol pemesanan item ini berwarna biru dengan kilauan merah muda, di suatu tempat di halaman ini") bot hanya akan membuka semua tautan di halaman, dan menggunakan mana pun yang datang kembali dengan halaman pemesanan. Itu bukan cara untuk memenangkan ini.

Buat server menjadi cepat, masukkan reCaptcha (satu-satunya yang saya temukan yang tidak bisa dibodohi dengan mudah, tetapi mungkin terlalu lambat untuk aplikasi Anda) di halaman pemesanan, dan pikirkan cara mengubah model sedikit sehingga pengguna reguler memiliki peluang yang sama baiknya dengan pengguna bot.

-Adam


"Setiap kali saya memikirkan" baik, bagaimana dengan melakukan ini ... "Saya selalu bisa mengatasinya dengan strategi bot yang cocok" Saya sampai pada kesimpulan yang sama ketika merancang sistem otentikasi saya, TETAPI - ada satu perbedaan di sini bahwa membuat saya ragu bahwa logika: Positif palsu bukan masalah besar
Jens Roland

(lanjutan) Misalnya, jika beberapa pengguna nyata di sini dan di sana tidak bisa mendapatkan penawaran khusus, itu sebenarnya bukan perunding besar (selama mereka tidak tahu apa yang mereka lewatkan). Dalam sistem auth, ini adalah pelanggar - Anda tidak ingin pengguna dicegah untuk masuk
Jens Roland

(lanjutan) Artinya, Anda dapat merancang sistem Woot menjadi lebih ketat daripada penanggulangan spambot 'tradisional', dan karena ini, Anda mungkin dapat menggagalkan bot secara efektif.
Jens Roland

(Namun, sekarang saya telah memikirkannya lagi, saya tidak bisa memikirkan cara yang bekerja, yang juga akan menggagalkan 'serangan' distro / botnet)
Jens Roland

11

Penafian: Jawaban ini sepenuhnya tidak terkait pemrograman. Namun, ia mencoba menyerang alasan skrip pada awalnya.

Gagasan lain adalah jika Anda benar-benar memiliki jumlah terbatas untuk dijual, mengapa Anda tidak mengubahnya dari metodologi yang pertama datang pertama dilayani? Kecuali, tentu saja, hype adalah bagian dari skema pemasaran Anda.

Ada banyak pilihan lain, dan saya yakin orang lain dapat memikirkan beberapa yang berbeda:

  • antrian pemesanan (sistem pra-pemesanan) - Beberapa skrip mungkin masih berakhir di depan antrian, tetapi mungkin lebih cepat untuk memasukkan info secara manual.

  • sistem undian (semua orang yang mencoba memesannya dimasukkan ke dalam sistem) - Dengan cara ini orang-orang dengan skrip memiliki peluang yang sama dengan yang tidak.

  • antrian prioritas terburu-buru - Jika benar-benar ada nilai yang dirasakan tinggi, orang mungkin bersedia membayar lebih. Terapkan antrian pemesanan, tetapi izinkan orang membayar lebih banyak untuk ditempatkan lebih tinggi dalam antrian.

  • lelang (kredit jatuh ke tangan David Schmitt untuk yang satu ini, komentar adalah milik saya) - Orang masih dapat menggunakan skrip untuk masuk pada menit terakhir, tetapi tidak hanya mengubah struktur penetapan harga, orang berharap untuk bertarung dengan orang lain . Anda juga dapat melakukan hal-hal untuk membatasi jumlah tawaran dalam periode waktu tertentu, membuat orang menelepon terlebih dahulu untuk mendapatkan kode otorisasi, dll.


1
Terima kasih. Lihat, saya tahu ada yang lain.
lc.

setiap sistem undian hanya akan kelebihan beban untuk meningkatkan peluang dalam mendukung bot
Andy Dent

Tidak jika Anda membatasi hanya untuk satu per orang / rumah tangga / (fisik) alamat itu tidak akan
lc.

11

Tidak peduli seberapa aman pemikiran Nazi tentang komunikasi mereka, sekutu akan sering memecah pesan mereka. Tidak peduli bagaimana Anda mencoba menghentikan bot dari menggunakan situs Anda, pemilik bot akan mencari jalan keluar. Maaf jika itu membuat Anda Nazi :-)

Saya pikir diperlukan pola pikir yang berbeda

  • Jangan mencoba menghentikan bot dari menggunakan situs Anda
  • Jangan pergi untuk memperbaiki yang bekerja segera, mainkan permainan yang panjang

Masuklah ke dalam pola pikir bahwa tidak masalah apakah klien situs Anda adalah manusia atau bot, keduanya hanya membayar pelanggan; tetapi yang satu memiliki keunggulan yang tidak adil dibanding yang lain. Beberapa pengguna tanpa banyak kehidupan sosial (pertapa) bisa sama menjengkelkan bagi pengguna lain sebagai bot.

Catat waktu Anda mempublikasikan penawaran dan waktu akun memilih untuk membelinya.

Ini memberi Anda catatan tentang seberapa cepat klien membeli barang.

Variasikan waktu hari Anda mempublikasikan penawaran.

Misalnya, memiliki jendela 3 jam yang dimulai pada waktu yang tidak jelas (tengah malam?) Hanya bot dan petapa yang akan selalu menyegarkan halaman selama 3 jam hanya untuk mendapatkan pesanan dalam hitungan detik. Jangan pernah memvariasikan waktu basis, hanya ukuran jendela.

Seiring waktu gambar akan muncul.

01: Anda dapat melihat akun mana yang secara teratur membeli produk dalam beberapa detik dari mereka akan ditayangkan. Menyarankan mereka mungkin bot.

02: Anda juga dapat melihat jendela waktu yang digunakan untuk penawaran, jika jendelanya 1 jam maka beberapa pembeli awal adalah manusia. Manusia jarang akan menyegarkan selama 4 jam. Jika waktu yang berlalu cukup konsisten antara mempublikasikan / membeli terlepas dari durasi jendela maka itu adalah bot. Jika waktu publikasi / pembelian singkat untuk windows kecil dan lebih lama untuk windows besar, itu pertapa!

Sekarang, alih-alih menghentikan bot dari menggunakan situs Anda, Anda memiliki cukup informasi untuk memberi tahu Anda akun mana yang pasti digunakan oleh bot, dan akun mana yang kemungkinan akan digunakan oleh para pertapa. Apa yang Anda lakukan dengan informasi itu terserah Anda, tetapi Anda tentu dapat menggunakannya untuk membuat situs Anda lebih adil bagi orang-orang yang memiliki kehidupan.

Saya pikir melarang akun bot tidak ada gunanya, itu sama saja dengan menelepon Hitler dan mengatakan "Terima kasih atas posisi U-boat Anda!" Entah bagaimana Anda perlu menggunakan informasi dengan cara yang tidak disadari oleh pemilik akun. Mari kita lihat apakah saya dapat memimpikan sesuatu .....

Memproses pesanan dalam antrian:

Ketika pelanggan melakukan pemesanan, mereka segera mendapatkan email konfirmasi yang memberitahu mereka bahwa pesanan mereka ditempatkan dalam antrian dan akan diberitahukan ketika telah diproses. Saya mengalami hal semacam ini dengan pesanan / pengiriman di Amazon dan itu tidak mengganggu saya sama sekali, saya tidak keberatan mendapatkan email beberapa hari kemudian mengatakan bahwa pesanan saya telah dikirim selama saya segera mendapatkan email yang mengatakan kepada saya bahwa Amazon tahu saya menginginkan buku itu. Dalam kasus Anda itu akan menjadi email untuk

  1. Pesanan Anda telah ditempatkan dan sedang dalam antrian.
  2. Pesanan Anda telah diproses.
  3. Pesanan Anda telah dikirim.

Pengguna berpikir mereka dalam antrian yang adil. Proses antrian Anda setiap 1 jam sehingga pengguna biasa juga mengalami antrian, agar tidak menimbulkan kecurigaan. Hanya proses pesanan dari akun bot dan pertapa setelah mereka berada dalam antrian untuk "rata-rata waktu pemesanan manusia + x jam". Secara efektif mengurangi bot untuk manusia.


Apa artinya? :-)
Peter Morris

Ah terima kasih :-) Saya menyebutkan Nazi karena saya sangat tertarik dengan cerita Perang Dunia II tentang Bletchley park :-) Beberapa kisah tentang bagaimana pesan dipecah menggunakan pendekatan mental yang berbeda untuk masalah tersebut, seperti menganggap operator terlalu malas untuk mengubah kode dari malam sebelumnya :-)
Peter Morris

10

Saya katakan mengekspos informasi harga menggunakan API. Ini adalah solusi yang tidak intuitif tetapi berhasil untuk memberi Anda kontrol atas situasi. Tambahkan beberapa batasan pada API untuk membuatnya sedikit kurang berfungsi dibandingkan situs web.

Anda dapat melakukan hal yang sama untuk memesan. Anda dapat bereksperimen dengan perubahan kecil pada fungsionalitas / kinerja API hingga Anda mendapatkan efek yang diinginkan.

Ada proxy dan botnet untuk mengalahkan cek IP. Ada skrip membaca captcha yang sangat bagus. Bahkan ada tim pekerja di India yang mengalahkan captcha dengan harga murah. Solusi apa pun yang Anda dapat dapat dikalahkan secara wajar. Bahkan solusi Ned Batchelder dapat dilewati dengan menggunakan kontrol WebBrowser atau browser lain yang disatukan dengan botnet atau daftar proxy.


8

Kami saat ini menggunakan penyeimbang beban BigIP generasi terbaru dari F5 untuk melakukan ini. BigIP memiliki fitur manajemen lalu lintas canggih yang dapat mengidentifikasi pengikis dan bot berdasarkan frekuensi dan pola penggunaan bahkan dari sekumpulan sumber di belakang satu IP. Ini kemudian dapat membatasi ini, menyajikan konten alternatif kepada mereka atau cukup menandainya dengan header atau cookie sehingga Anda dapat mengidentifikasi mereka dalam kode aplikasi Anda.


Ini adalah solusi tepat yang akan saya sarankan, terutama pelambatan otomatis. Anda dapat memutar sendiri, hanya mengandalkan beberapa analisis sinyal biasa hingga lanjutan.
wds

7

Pertama, saya rekap apa yang perlu kita lakukan di sini. Saya menyadari bahwa saya hanya memparafrasekan pertanyaan awal, tetapi penting bahwa kita mendapatkan ini 100% lurus, karena ada banyak saran bagus yang mendapatkan 2 atau 3 dari 4 benar, tetapi karena saya akan menunjukkan, Anda akan memerlukan pendekatan beragam untuk mencakup semua persyaratan.

Persyaratan 1: Menyingkirkan 'bot slamming':

'Membanting' halaman depan Anda dengan cepat merusak kinerja situs Anda dan merupakan inti masalahnya. 'Membanting' ini berasal dari bot IP-tunggal dan - seharusnya - dari botnet juga. Kami ingin menyingkirkan keduanya.

Persyaratan 2: Jangan main-main dengan pengalaman pengguna:

Kita dapat memperbaiki situasi bot dengan cukup efektif dengan menerapkan prosedur verifikasi yang buruk seperti menelpon operator manusia, menyelesaikan banyak CAPTCHA, atau serupa, tetapi itu akan seperti memaksa setiap penumpang pesawat yang tidak bersalah untuk melompat melalui lingkaran keamanan gila hanya untuk kesempatan tipis. menangkap teroris yang paling bodoh. Oh, tunggu - kami benar-benar melakukan itu. Tapi mari kita lihat apakah kita tidak bisa melakukannya di woot.com.

Persyaratan 3: Menghindari 'perlombaan senjata':

Seperti yang Anda sebutkan, Anda tidak ingin terjebak dalam perlombaan senjata spam. Jadi, Anda tidak dapat menggunakan tweak sederhana seperti bidang formulir tersembunyi atau campur aduk, pertanyaan matematika, dll., Karena pada dasarnya itu adalah langkah-langkah yang tidak jelas yang dapat secara otomatis terdeteksi dan dielakkan secara sepele.

Persyaratan 4: Menggagalkan bot 'alarm':

Ini mungkin yang paling sulit dari kebutuhan Anda. Sekalipun kami dapat membuat tantangan verifikasi manusia yang efektif, bot masih bisa memberi polling di halaman depan Anda dan memberi tahu penulis ketika ada tawaran baru. Kami ingin membuat bot itu tidak layak juga. Ini adalah versi yang lebih kuat dari persyaratan pertama, karena tidak hanya bot tidak dapat mengeluarkan permintaan atas permintaan pembakaran cepat yang merusak kinerja - mereka bahkan tidak dapat mengeluarkan permintaan berulang yang cukup untuk mengirim 'alarm' ke penulis pada waktunya untuk menang penawaran.


Oke, jadi mari kita lihat jika kita dapat memenuhi keempat persyaratan. Pertama, seperti yang saya sebutkan, tidak ada ukuran yang akan melakukan trik. Anda harus menggabungkan beberapa trik untuk mencapainya, dan Anda harus menelan dua gangguan:

  1. Sejumlah kecil pengguna akan diminta untuk melompat melalui lingkaran
  2. Sejumlah kecil pengguna tidak akan bisa mendapatkan penawaran khusus

Saya menyadari ini menjengkelkan, tetapi jika kita bisa membuat angka 'kecil' cukup kecil , saya harap Anda akan setuju positif lebih banyak daripada negatif.

Ukuran pertama: Pembatasan berbasis pengguna:

Yang ini adalah no-brainer, dan saya yakin Anda sudah melakukannya. Jika pengguna masuk, dan terus menyegarkan 600 kali per detik (atau sesuatu), Anda berhenti merespons dan katakan padanya untuk mendinginkannya. Bahkan, Anda mungkin mempercepat permintaannya secara signifikan lebih cepat dari itu, tetapi Anda mendapatkan idenya. Dengan cara ini, bot yang masuk akan diblokir / dicekik segera setelah polling situs Anda dimulai. Ini bagian yang mudah. Bot yang tidak terauthentikasi adalah masalah kita yang sebenarnya, demikian seterusnya:

Ukuran kedua: Beberapa bentuk pelambatan IP, seperti yang disarankan oleh hampir semua orang:

Tidak peduli apa, Anda harus melakukan beberapa pembatasan berbasis IP untuk menggagalkan 'bot slamming'. Karena tampaknya penting bagi Anda untuk memungkinkan tidak berkepentingan pengunjung (non-login-in) untuk mendapatkan penawaran khusus, Anda hanya memiliki IP untuk pergi oleh awalnya, dan meskipun mereka tidak sempurna, mereka melakukan pekerjaan terhadap single-IP bot. Botnet adalah binatang yang berbeda, tapi aku akan kembali ke sana. Untuk saat ini, kami akan melakukan beberapa pembatasan sederhana untuk mengalahkan bot single-IP cepat-api.

Hit kinerja dapat diabaikan jika Anda menjalankan pemeriksaan IP sebelum semua pemrosesan lainnya, gunakan server proxy untuk logika pelambatan, dan menyimpan IP dalam struktur pohon yang dioptimalkan dengan memcached lookup.

Ukuran ketiga: Mengganti throttle dengan respons cache:

Dengan bot IP tunggal cepat yang diaktifkan, kami masih harus mengatasi bot IP tunggal yang lambat, yaitu. bot yang secara khusus di-tweak untuk 'terbang di bawah radar' dengan memberi jarak permintaan sedikit lebih jauh daripada pencegahan pelambatan.

Untuk secara instan membuat bot IP tunggal lambat tidak berguna, cukup gunakan strategi yang disarankan oleh abelenky: sajikan halaman cache 10 menit untuk semua IP yang telah terlihat dalam 24 jam terakhir (atau lebih). Dengan begitu, setiap IP mendapat satu 'peluang' per hari / jam / minggu (tergantung pada periode yang Anda pilih), dan tidak akan ada gangguan yang terlihat bagi pengguna nyata yang hanya memukul 'memuat ulang', kecuali bahwa mereka tidak menang penawaran.

Keindahan dari ukuran ini adalah yang juga menggagalkan 'alarm bot', asalkan mereka tidak berasal dari botnet.

(Saya tahu Anda mungkin lebih suka jika pengguna nyata diizinkan untuk menyegarkan berulang kali, tetapi tidak ada cara untuk memberi tahu manusia yang me-refresh-spam dari bot permintaan-spam yang terpisah tanpa CAPTCHA atau yang serupa)

Ukuran keempat: reCAPTCHA:

Anda benar bahwa CAPTCHA melukai pengalaman pengguna dan harus dihindari. Namun, dalam situasi _one_ mereka dapat menjadi teman terbaik Anda: Jika Anda telah merancang sistem yang sangat membatasi untuk menggagalkan bot, itu - karena keterbatasannya - juga menangkap sejumlah positif palsu; maka CAPTCHA yang berfungsi sebagai upaya terakhir akan memungkinkan pengguna nyata yang ketahuan menyelinap karena pelambatan Anda (sehingga menghindari situasi DoS yang mengganggu).

Titik manisnya, tentu saja, adalah ketika SEMUA bot tertangkap di jaring Anda, sementara sangat sedikit pengguna nyata yang terganggu oleh CAPTCHA.

Jika Anda, ketika menyajikan halaman cache yang berumur 10 menit, juga menawarkan alternatif, opsional , 'penyegaran halaman depan' yang diverifikasi CAPTCHA, maka manusia yang benar - benar ingin terus menyegarkan, masih dapat melakukannya tanpa mendapatkan halaman cache lama. , tetapi dengan biaya harus menyelesaikan CAPTCHA untuk setiap penyegaran. Itu adalah jengkel, tapi satu opsional hanya untuk pengguna mati-keras, yang cenderung lebih memaafkan karena mereka tahu mereka sedang game sistem untuk meningkatkan peluang mereka, dan bahwa peluang peningkatan tidak datang gratis.

Ukuran kelima: Umpan umpan:

Christopher Mahan punya ide yang agak saya sukai, tetapi saya akan memutarbalikkannya. Setiap kali Anda mempersiapkan penawaran baru, siapkan dua 'penawaran' lainnya juga, yang tidak akan dipilih manusia, seperti wingnut 12mm seharga $ 20. Ketika penawaran muncul di halaman depan, masukkan ketiga 'penawaran' dalam gambar yang sama, dengan angka yang sesuai untuk setiap penawaran. Ketika pengguna / bot benar-benar melanjutkan untuk memesan item, mereka harus memilih (tombol radio) yang menawarkan yang mereka inginkan, dan karena kebanyakan bot hanya akan menebak, dalam dua dari tiga kasus, bot akan dibeli tidak berharga sampah

Tentu saja, ini tidak membahas 'bot alarm', dan ada kemungkinan (langsing) seseorang dapat membuat bot yang bisa memilih item yang benar. Namun, risiko membeli sampah secara tidak sengaja harus membuat skrip beralih sepenuhnya dari bot yang sepenuhnya otomatis.

Ukuran keenam: Botnet Throttling:

[dihapus]

Oke ............ Sekarang saya menghabiskan sebagian besar malam saya memikirkan hal ini, mencoba berbagai pendekatan .... penundaan global .... token berbasis cookie .. melayani antri ... 'orang asing mencekik' ... Dan itu tidak berhasil. Tidak. Saya menyadari alasan utama mengapa Anda belum menerima jawaban apa pun adalah bahwa tidak ada yang mengusulkan cara untuk menggagalkan serangan zombie / net / botnet terdistribusi .... jadi saya benar-benar ingin memecahkannya. Saya yakin saya telah memecahkan masalah botnet untuk otentikasi di utas yang berbeda , jadi saya punya harapan besar untuk masalah Anda juga. Tetapi pendekatan saya tidak diterjemahkan untuk ini. Anda hanya memiliki IP untuk digunakan, dan botnet yang cukup besar tidak mengungkapkan dirinya dalam analisis apa pun berdasarkan alamat IP.

Jadi begitulah : Ukuran keenam saya tidak ada artinya. Tidak ada. Zip. Kecuali jika botnet kecil dan / atau cukup cepat untuk terperangkap dalam throttle IP biasa, saya tidak melihat tindakan yang efektif terhadap botnet yang tidak melibatkan verifikasi manusia secara eksplisit seperti CAPTHA. Maaf, tapi saya pikir menggabungkan lima langkah di atas adalah taruhan terbaik Anda. Dan Anda mungkin bisa melakukannya dengan baik hanya dengan trik caching 10 menit abelenky saja.


Sangat baik dinyatakan. Terima kasih atas masukan Anda.
Shawn Miller

bukan 3. berarti Anda menayangkan halaman lama untuk semua AOL, dengan asumsi beberapa bot berasal dari kumpulan IP AOL?
Andy Dent

@Andy: Hanya jika semua pengguna AOL berbagi alamat IP yang sama dengan yang digunakan bot saat melakukan spam.
Jens Roland

6

Bagaimana kalau memperkenalkan penundaan yang membutuhkan interaksi manusia, seperti semacam "game CAPTCHA". Misalnya, ini bisa berupa game Flash kecil di mana selama 30 detik mereka harus meledakkan bola kotak-kotak dan menghindari meledak bola padat (menghindari masalah buta warna!). Gim akan diberi seed nomor acak dan yang dikirimkan gim kembali ke server adalah koordinat dan stempel waktu dari poin yang diklik, bersama dengan seed yang digunakan.

Di server Anda mensimulasikan mekanisme permainan menggunakan seed itu untuk melihat apakah klik memang akan meledak. Jika mereka melakukannya, bukan hanya mereka manusia, tetapi mereka membutuhkan waktu 30 detik untuk membuktikan diri mereka sendiri. Beri mereka id sesi.

Anda membiarkan id sesi itu melakukan apa yang diinginkannya, tetapi jika membuat terlalu banyak permintaan, mereka tidak dapat melanjutkan tanpa bermain lagi.


Ide yang menyenangkan, tetapi benar-benar dan sepenuhnya menghancurkan pengalaman pengguna. Orang normal yang mengunjungi situs akan menganggapnya sebagai 30 detik menunggu yang tidak berguna. 30 detik menunggu sia-sia saat menjelajah internet atau menggunakan aplikasi web sama sekali tidak bisa diterima.
Arve Systad

orang normal yang berkunjung tidak akan memicu penundaan, hanya seseorang yang membuat jumlah permintaan yang tidak masuk akal. Idenya adalah lidah kecil di pipi, tapi aku bisa melihatnya bekerja jika target pemirsa yang digunakan untuk game flash kecil :)
Paul Dixon

Menghibur (dan hampir-sangat aman) ide, tapi aku akan jengkel (terutama selama kegilaan Bag Of Canaries), dan itu akan membutuhkan lebih banyak pemrosesan secara besar-besaran pada server mereka untuk melakukan pengecekan (yang merupakan bagian besar dari masalah). Juga, bot bisa meledak gelembung. Anda harus sering mengubah aturan.
Groxx

Dengan asumsi setiap permainan mengeluarkan token, dan Anda tahu waktu Anda mengeluarkan token, Anda hanya perlu mencoba untuk memproses token sekali, dan hanya antara 30 dan mengatakan 300 detik setelah dikeluarkan. Keindahan itu adalah bahwa bahkan jika bot tidak memecahkan gelembung, mereka masih menunggu 30 detik untuk melakukannya.
Paul Dixon

Plus, jangan lupa idenya adalah membatasi lalu lintas. Halaman itu dapat mengatakan "kami sangat sibuk, jika Anda sedang terburu-buru, mainkan game ini selama 30 detik, atau coba lagi dalam beberapa menit ...
Paul Dixon

5

Ada beberapa solusi lain / lebih baik sudah diposting, tetapi untuk kelengkapan, saya pikir saya akan menyebutkan ini:

Jika masalah utama Anda adalah penurunan kinerja, dan Anda sedang melihat memalu yang sebenarnya , maka Anda sebenarnya berurusan dengan serangan DoS, dan Anda mungkin harus mencoba menanganinya. Salah satu pendekatan yang umum adalah dengan hanya menjatuhkan paket dari IP di firewall setelah sejumlah koneksi per detik / menit / dll. Sebagai contoh, firewall Linux standar, iptables, memiliki fungsi pencocokan operasi standar 'hashlimit', yang dapat digunakan untuk mengkorelasikan permintaan koneksi per unit waktu ke alamat IP.

Meskipun, pertanyaan ini mungkin akan lebih cocok untuk SO-turunan berikutnya yang disebutkan pada SO-podcast terakhir, itu belum diluncurkan, jadi saya kira tidak apa-apa untuk menjawab :)

EDIT:
Seperti yang ditunjukkan oleh novatrust, masih ada ISP yang sebenarnya TIDAK memberikan IP kepada pelanggan mereka, jadi secara efektif, skrip-pelanggan dari ISP semacam itu akan menonaktifkan semua-pelanggan dari ISP itu.


Sayangnya beberapa ISP telah berbagi alamat IP keluar. Misalnya, AOL memiliki koleksi IP terbatas yang ditampilkan oleh para anggotanya: webmaster.info.aol.com/proxyinfo.html Solusi Anda akan memaksakan batasan keras pada jumlah pengguna untuk banyak ISP.
Robert Venables

Wow, saya terpesona. Hal-hal seperti ini masih terjadi?
falstro

Astaga. Saya kira AOL tidak akan mengakses situs saya kalau begitu.
Karl

5

Tuliskan reverse-proxy pada server apache di depan aplikasi Anda yang mengimplementasikan Tarpit (Artikel Wikipedia) untuk menghukum bot. Itu hanya akan mengelola daftar alamat IP yang terhubung dalam beberapa detik terakhir. Anda mendeteksi ledakan permintaan dari satu alamat IP dan kemudian secara eksponensial menunda permintaan itu sebelum merespons.

Tentu saja, banyak manusia dapat datang dari alamat IP yang sama jika mereka berada di koneksi jaringan NAT'd tetapi tidak mungkin bahwa manusia akan keberatan waktu respons Anda pergi untuk 2mS ke 4mS (atau bahkan 400mS) sedangkan bot akan terhambat dengan meningkatnya penundaan cukup cepat.


4
  1. Berikan umpan RSS agar mereka tidak memakan bandwidth Anda.
  2. Saat membeli, buat semua orang menunggu waktu acak hingga 45 detik atau sesuatu, tergantung pada apa yang sebenarnya Anda cari. Apa kendala waktu Anda?
  3. Beri setiap orang 1 menit untuk memasukkan nama mereka untuk gambar dan kemudian pilih orang secara acak. Saya pikir ini adalah cara yang paling adil.
  4. Pantau akun (termasuk beberapa kali dalam sesi dan simpan?) Dan tambahkan penundaan ke akun yang sepertinya berada di bawah ambang batas kecepatan manusia. Setidaknya itu akan membuat bot diprogram untuk memperlambat dan bersaing dengan manusia.

Ini adalah konsep yang menarik tetapi "pemilihan acak" dan masa tunggu menghilangkan banyak "hiruk-pikuk" yang saya duga woot tergantung pada. Mengambil jenis urgensi waktu sudah merusak situs.
TM.

Jika itu terlihat seperti gambar, maka ia harus berurusan dengan hukum perjudian. Tidak layak.
jmucchiello

4

Pertama-tama, menurut definisi, adalah mustahil untuk mendukung transaksi tanpa kewarganegaraan, yaitu benar-benar anonim, sementara juga dapat memisahkan bot dari pengguna yang sah.

Jika kita dapat menerima premis bahwa kita dapat membebankan biaya pada pengunjung woot-baru-memukul pada hit halaman pertamanya, saya pikir saya punya solusi yang mungkin. Karena kurang nama yang lebih baik, saya akan dengan bebas menyebut solusi ini "Kunjungan ke DMV."

Katakanlah ada dealer mobil yang menawarkan mobil baru yang berbeda setiap hari, dan bahwa pada beberapa hari, Anda dapat membeli mobil sport eksotis dengan harga masing-masing $ 5 (batas 3), ditambah biaya tujuan $ 5.

Tangkapannya adalah, dealer mengharuskan Anda untuk mengunjungi dealer dan menunjukkan SIM yang valid sebelum Anda diizinkan masuk melalui pintu untuk melihat mobil apa yang dijual. Selain itu, Anda harus telah mengatakan SIM yang berlaku untuk melakukan pembelian.

Jadi, pengunjung pertama kali (sebut saja dia Bob) ke dealer mobil ini ditolak masuk, dan dirujuk ke kantor DMV (yang berlokasi tepat di sebelah) untuk mendapatkan SIM.

Pengunjung lain dengan SIM yang valid diizinkan masuk, setelah menunjukkan SIM-nya. Seseorang yang mengganggu dirinya sendiri dengan berkeliaran sepanjang hari, mengganggu para penjual, mengambil brosur, dan mengosongkan kopi dan kue gratis akhirnya akan ditolak.

Sekarang, kembali ke Bob tanpa lisensi - yang harus dia lakukan adalah menahan kunjungan ke DMV sekali. Setelah itu, dia dapat mengunjungi dealer dan membeli mobil kapan saja dia suka, kecuali dia secara tidak sengaja meninggalkan dompetnya di rumah, atau lisensi miliknya hancur atau dicabut.

Lisensi pengemudi di dunia ini hampir tidak mungkin dipalsukan.

Kunjungan ke DMV melibatkan terlebih dahulu mendapatkan formulir aplikasi di antrian "Mulai Di Sini". Bob harus membawa aplikasi yang sudah selesai ke jendela # 1, di mana pegawai negeri sipil yang paling masam akan mengambil aplikasinya, memprosesnya, dan jika semuanya beres, cap aplikasi untuk jendela itu dan kirim dia ke jendela berikutnya. Maka, Bob pergi dari jendela ke jendela, menunggu setiap langkah dari aplikasinya untuk dilalui, sampai akhirnya ia sampai pada akhir dan menerima SIMnya.

Tidak ada gunanya mencoba "korsleting" DMV. Jika formulir tidak diisi dengan benar dalam rangkap tiga, atau jawaban yang salah diberikan di jendela apa pun, aplikasi dihancurkan, dan pelanggan yang malang dikirim kembali ke awal.

Menariknya, tidak peduli seberapa penuh atau kosong kantor itu, dibutuhkan jumlah waktu yang sama untuk dilayani di setiap jendela berturut-turut. Bahkan ketika Anda adalah satu-satunya orang dalam barisan, tampaknya personel suka membuat Anda menunggu sebentar di belakang garis kuning sebelum mengucapkan, "Selanjutnya!"

Namun, hal-hal yang tidak begitu mengerikan di DMV. Sementara semua proses menunggu dan pemrosesan untuk mendapatkan lisensi sedang berlangsung, Anda dapat menonton infomersial yang sangat menghibur dan informatif untuk dealer mobil saat Anda berada di lobi DMV. Faktanya, infomerical berjalan cukup lama untuk menutupi jumlah waktu yang Anda habiskan untuk mendapatkan lisensi.

Penjelasan yang sedikit lebih teknis:

Seperti yang saya katakan di bagian paling atas, menjadi perlu untuk memiliki beberapa status pada hubungan client-server yang memungkinkan Anda untuk memisahkan manusia dari bot. Anda ingin melakukannya dengan cara yang tidak terlalu menghukum pengunjung manusia anonim (tidak diautentikasi).

Pendekatan ini mungkin membutuhkan pemrosesan sisi klien AJAX-y. Pengunjung baru yang memukul sekali-sekali yang akan diserang diberi "Welcome New User!" halaman penuh teks dan gambar yang (dengan pembatasan sisi server yang tepat) membutuhkan waktu beberapa detik untuk memuat sepenuhnya. Sementara ini terjadi (dan pengunjung mungkin sibuk membaca halaman selamat datang), token pengenalnya perlahan-lahan sedang dikumpulkan.

Katakanlah, untuk diskusi, token (alias "SIM) terdiri dari 20 potongan. Untuk mendapatkan setiap potongan berturut-turut, kode sisi klien harus mengirimkan permintaan yang valid ke server. Server memasukkan penundaan yang disengaja (katakanlah 200 milidetik), sebelum mengirim potongan berikutnya bersama dengan 'stempel' yang diperlukan untuk membuat permintaan potongan berikutnya (yaitu, perangko perlu beralih dari satu jendela DMV ke yang berikutnya). Semua mengatakan, sekitar 4 detik harus berlalu untuk menyelesaikan bagian-tantangan-respons-bagian-tantangan-respons -...- bagian-tantangan-respons-penyelesaian

Pada akhir proses ini, pengunjung memiliki token yang memungkinkan dia untuk pergi ke halaman deskripsi produk dan, pada gilirannya, pergi ke halaman pembelian. Token adalah ID unik untuk setiap pengunjung, dan dapat digunakan untuk membatasi aktivitasnya.

Di sisi server, Anda hanya menerima tampilan halaman dari klien yang memiliki token yang valid. Atau, jika penting bahwa setiap orang akhirnya dapat melihat halaman, berikan penalti waktu untuk permintaan yang tidak memiliki token yang valid.

Sekarang, agar ini relatif ramah bagi pengunjung manusia yang sah, untuk membuat proses penerbitan token terjadi secara relatif non-intrusively di latar belakang. Oleh karena itu kebutuhan untuk halaman selamat datang dengan salinan dan gambar yang menghibur yang sengaja sedikit melambat.

Pendekatan ini memaksa throttle-down bot untuk menggunakan token yang ada, atau mengambil waktu setup minimum untuk mendapatkan token baru. Tentu saja, ini tidak banyak membantu melawan serangan canggih menggunakan jaringan pengunjung palsu.


4

Anda tidak dapat sepenuhnya mencegah bot, bahkan dengan captcha. Namun Anda dapat membuatnya sakit untuk menulis dan memelihara bot dan karena itu mengurangi jumlahnya. Terutama dengan memaksa mereka untuk memperbarui bot mereka setiap hari, Anda akan menyebabkan sebagian besar kehilangan minat.

Berikut adalah beberapa ide untuk membuatnya lebih sulit untuk menulis bot:

  • Harus menjalankan fungsi javascript. Javascript membuatnya jauh lebih sulit untuk menulis bot. Mungkin memerlukan captcha jika mereka tidak menjalankan javascript untuk tetap memungkinkan pengguna non-javascript yang sebenarnya (minimal).

  • Hitung waktu penekanan tombol saat mengetik ke dalam formulir (lagi melalui javascript). Jika tidak seperti manusia maka tolaklah. Sangat merepotkan untuk meniru mengetik manusia di bot.

  • Tulis kode Anda untuk memperbarui ID bidang Anda setiap hari dengan nilai acak baru. Ini akan memaksa mereka untuk memperbarui bot mereka setiap hari yang menyakitkan.

  • Tulis kode Anda untuk memesan ulang bidang Anda setiap hari (jelas dalam beberapa cara itu tidak acak bagi pengguna Anda). Jika mereka mengandalkan pesanan lapangan, ini akan membuat mereka tersandung dan sekali lagi memaksa pemeliharaan harian ke kode bot mereka.

  • Anda bisa melangkah lebih jauh dan menggunakan konten Flash. Flash benar-benar menyebalkan untuk menulis bot.

Umumnya jika Anda mulai mengambil pola pikir untuk tidak mencegahnya, tetapi membuatnya lebih berhasil, Anda mungkin dapat mencapai tujuan yang Anda cari.


Manusia kadang-kadang terlibat dalam pengetikan bentuk non-manusia.
Loren Pechtel

Anda perlu mengizinkan gaya / kecepatan pengetikan yang sangat berbeda - mulai dari berburu, mengecek, hingga menyentuh. Tidak sulit untuk menulis bot yang berada di antara keduanya. Hal-hal seperti ID bidang dan urutan variabel dapat dielakkan dengan membaca dan menguraikan formulir, yang tidak terlalu sulit.
Kornel

4

Tetap tunda 5 menit pada semua pengumuman produk untuk pengguna yang tidak terdaftar. Pengguna biasa tidak akan benar-benar memperhatikan hal ini dan pengguna non-seksual akan terdaftar.


3

Saya tidak melihat beban besar yang Anda klaim dari memeriksa IP yang masuk. Sebaliknya, saya telah melakukan proyek untuk salah satu klien saya yang menganalisis log akses HTTP setiap lima menit (bisa jadi real-time, tetapi dia tidak ingin itu karena alasan yang saya tidak pernah mengerti sepenuhnya) dan membuat aturan firewall untuk memblokir koneksi dari alamat IP apa pun yang menghasilkan terlalu banyak permintaan kecuali alamat tersebut dapat dikonfirmasikan sebagai milik mesin pencari yang sah (google, yahoo, dll.).

Klien ini menjalankan layanan hosting web dan menjalankan aplikasi ini pada tiga server yang menangani total 800-900 domain. Aktivitas puncak berada dalam kisaran ribuan-hit-per-detik dan tidak pernah ada masalah kinerja - firewall sangat efisien dalam menjatuhkan paket dari alamat yang masuk daftar hitam.

Dan, ya, teknologi DDOS benar-benar ada yang akan mengalahkan skema ini, tapi dia tidak melihat itu terjadi di dunia nyata. Sebaliknya, dia mengatakan itu sangat mengurangi beban di server-nya.


3

Pendekatan saya akan fokus pada solusi non-teknologi (jika Anda memasuki perlombaan senjata Anda akan kehilangan, atau setidaknya menghabiskan banyak waktu dan uang untuk). Saya akan fokus pada bagian penagihan / pengiriman - Anda dapat menemukan bot dengan menemukan beberapa pengiriman ke alamat yang sama atau dengan beberapa biaya ke metode pembayaran tunggal. Anda bahkan dapat melakukan ini di seluruh item selama beberapa minggu, jadi jika pengguna mendapat item sebelumnya (dengan merespons sangat cepat) ia mungkin akan diberi semacam "cacat" kali ini.

Ini juga akan memiliki efek samping (menguntungkan, saya pikir, tetapi saya bisa salah pemasaran-bijaksana untuk kasus Anda) mungkin memperluas lingkaran orang-orang yang beruntung dan bisa membeli woot.


3

Sebagian besar solusi teknis murni telah ditawarkan. Karena itu saya akan menyarankan pandangan lain tentang masalahnya.

Seperti yang saya pahami, bot dipasang oleh orang - orang yang benar - benar mencoba membeli tas yang Anda jual. Masalahnya adalah -

  1. Orang lain, yang tidak mengoperasikan bot, berhak mendapat kesempatan untuk membeli, dan Anda menawarkan jumlah tas yang terbatas.
  2. Anda ingin menarik manusia ke situs Anda dan hanya menjual tas.

Alih-alih mencoba menghindari bot, Anda dapat mengaktifkan pembeli tas potensial untuk berlangganan email, atau bahkan pembaruan SMS, agar diberitahukan ketika terjadi penjualan. Anda bahkan dapat memberi mereka satu atau dua menit awal (URL khusus tempat penjualan dimulai, dihasilkan secara acak, dan dikirim dengan surat / SMS).

Ketika pembeli ini pergi untuk membeli mereka ada di situs Anda, Anda dapat menunjukkan kepada mereka apa pun yang Anda inginkan di spanduk samping atau apa pun. Mereka yang menjalankan bot akan lebih suka mendaftar ke layanan notifikasi Anda.

Pelari bot mungkin masih menjalankan bot pada notifikasi Anda untuk menyelesaikan pembelian lebih cepat. Beberapa solusi untuk itu dapat menawarkan pembelian satu klik.

Ngomong-ngomong, Anda menyebutkan bahwa pengguna Anda tidak terdaftar, tetapi sepertinya mereka yang membeli tas ini bukan pembeli acak, tetapi orang yang menantikan penjualan ini. Dengan demikian, mereka mungkin bersedia mendaftar untuk mendapatkan keuntungan dalam mencoba "memenangkan" tas.

Intinya yang saya sarankan adalah mencoba dan melihat masalah sebagai masalah sosial, bukan masalah teknis.

Asaf


2

Memblokir waktu agen pengguna yang membuat begitu banyak permintaan per menit. Misalnya, jika Anda memiliki seseorang yang meminta halaman persis setiap 5 detik selama 10 menit, mereka mungkin bukan pengguna ... Tapi mungkin sulit untuk memperbaikinya.

Jika mereka memicu peringatan, arahkan kembali setiap permintaan ke halaman statis dengan sesedikit mungkin DB-IO dengan pesan yang memberi tahu mereka bahwa mereka akan diizinkan kembali dalam X menit.

Penting untuk menambahkan bahwa Anda mungkin hanya perlu menerapkan ini pada permintaan untuk halaman dan mengabaikan semua permintaan untuk media (js, gambar, dll).


Saya sudah melakukan ini pada proyek pribadi, sepertinya metode yang bagus. Anda hanya perlu mengingat semua ip ketika mereka mencapai halaman Anda, dan memiliki aturan yang mengatur apa artinya terlalu sering memukul halaman Anda. Masalahnya adalah bahwa OP mengatakan memeriksa IP terlalu mahal, yang saya tidak mengerti.
Karl

Jika Anda menerapkan pemeriksaan IP sendiri (yaitu dalam database Anda, dari skrip PHP Anda atau apa pun), maka itu akan sangat mahal. Dapatkan firewall untuk melakukannya untuk Anda dan itu menjadi jauh lebih layak.
rmeador

rmeador: Sepertinya juga akan jauh lebih sulit untuk menentukan apakah permintaan itu untuk HTML atau media lain. Jika Anda memiliki 20 hal eksternal di halaman Anda, Anda mencari minimal 21 permintaan untuk pengguna baru dalam 1-2 detik.
Oli

2

Mencegah DoS akan mengalahkan # 2 dari tujuan @ davebug yang diuraikan di atas, "Menjaga situs pada kecepatan yang tidak diperlambat oleh bot" tetapi tidak perlu menyelesaikan # 1, "Jual item ke manusia yang bukan skrip"

Saya yakin seorang penulis naskah dapat menulis sesuatu untuk skate tepat di bawah batas berlebihan yang masih akan lebih cepat daripada manusia bisa melalui formulir pemesanan.


2

Baiklah jadi spammer bersaing orang biasa untuk memenangkan lelang "rawa omong kosong"? Mengapa tidak membuat pelelangan berikutnya menjadi "kantong sampah" literal? Spammer dapat membayar uang baik untuk tas penuh doggy do, dan kita semua menertawakan mereka.


2

Yang penting di sini adalah untuk mengubah sistem untuk menghapus beban dari server Anda, mencegah bot memenangkan kantong sampah TANPA membiarkan botlords tahu Anda bermain game mereka atau mereka akan merevisi strategi mereka. Saya tidak berpikir ada cara untuk melakukan ini tanpa proses di akhir Anda.

Jadi, Anda merekam hit di beranda Anda. Setiap kali seseorang mengklik halaman koneksi itu dibandingkan dengan hit terakhirnya, dan jika itu terlalu cepat maka dikirim versi halaman tanpa penawaran. Ini dapat dilakukan dengan semacam mekanisme penyeimbangan beban yang mengirimkan bot (klik yang terlalu cepat) ke server yang hanya melayani versi cache halaman beranda Anda; orang sungguhan dikirim ke server yang bagus. Ini mengambil beban dari server utama dan membuat bot berpikir bahwa mereka masih melayani halaman dengan benar.

Bahkan lebih baik lagi jika penawaran itu bisa ditolak. Maka Anda masih dapat membuat penawaran di server palsu tetapi ketika bot mengisi formulir mengatakan "Maaf, Anda tidak cukup cepat" :) Maka mereka pasti akan berpikir mereka masih dalam permainan.


2

Bagaimana Anda tahu ada skrip yang menempatkan pesanan?

Inti dari masalah Anda adalah bahwa Anda tidak dapat memisahkan skrip dari pengguna yang sah dan karena itu tidak dapat memblokir mereka, jadi bagaimana Anda tahu ada skrip sama sekali?

Jika Anda memiliki cara untuk menjawab pertanyaan ini, maka Anda memiliki serangkaian karakteristik yang dapat Anda gunakan untuk memfilter skrip.


2

Mari kita atasi masalahnya - Anda memiliki bot yang membeli barang-barang yang Anda inginkan dibeli oleh orang-orang nyata, bagaimana dengan membuat peluang nyata bahwa bot akan membeli barang-barang yang tidak Anda inginkan untuk dibeli oleh orang sungguhan.

Miliki kesempatan acak untuk beberapa html yang tidak ditampilkan yang oleh para penggaruk akan dianggap sebagai situasi nyata, tetapi orang-orang nyata tidak akan melihat (dan jangan lupa bahwa orang-orang nyata termasuk yang buta, jadi pertimbangkan juga pembaca layar dll), dan ini berjalan untuk membeli sesuatu yang terlalu mahal (atau tidak melakukan pembelian yang sebenarnya, tetapi mendapatkan perincian pembayaran bagi Anda untuk dimasukkan ke dalam daftar larangan).

Bahkan jika bot beralih ke 'waspada pengguna' daripada 'melakukan pembelian', jika Anda bisa mendapatkan cukup alarm palsu, Anda mungkin dapat membuatnya cukup tidak berharga bagi orang-orang (mungkin tidak semua orang, tetapi beberapa pengurangan dalam scamming adalah lebih baik daripada tidak sama sekali) untuk tidak repot.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.