Praktik pendekatan CAPTCHA berbasis non-gambar?

318

Sepertinya kami akan menambahkan dukungan CAPTCHA ke Stack Overflow. Ini diperlukan untuk mencegah bot, spammer, dan aktivitas skrip berbahaya lainnya. Kami hanya ingin manusia memposting atau mengedit sesuatu di sini!

Kami akan menggunakan JavaScript (jQuery) CAPTCHA sebagai garis pertahanan pertama:

http://docs.jquery.com/Tutorials:Safer_Contact_Forms_Without_CAPTCHAs

Keuntungan dari pendekatan ini adalah, bagi kebanyakan orang, CAPTCHA tidak akan pernah terlihat!

Namun, untuk orang-orang dengan JavaScript yang dinonaktifkan, kami masih membutuhkan fallback dan ini adalah hal yang sulit.

Saya telah menulis kontrol CAPTCHA tradisional untuk ASP.NET yang dapat kita gunakan kembali.

CaptchaImage

Namun, saya lebih memilih untuk menggunakan sesuatu yang tekstual untuk menghindari overhead membuat semua gambar ini di server dengan setiap permintaan.

Saya telah melihat hal-hal seperti ..

  • Captcha teks ASCII: \/\/(_)\/\/
  • teka-teki matematika: apa itu 7 minus 3 kali 2?
  • pertanyaan trivia: apa yang rasanya lebih enak, katak atau es loli?

Mungkin saya hanya memiringkan ke kincir angin di sini, tetapi saya ingin memiliki <noscript>CAPTCHA kompatibel berbasis sumber daya kurang intensif jika mungkin.

Ide ide?

Jeff Atwood
sumber
16
Tidak perlu benar-benar membuat gambar di server. Anda hanya perlu menangani permintaan tersebut. Misalnya <img src = "generateImage.aspx? Guid = blah">
Brian R. Bondy
58
Pertanyaan trivia rentan terhadap bias budaya (pikirkan tentang lelaki Prancis yang menjawab pertanyaan Anda ...). Selain itu, mereka dapat menangani pengguna yang bahasa Inggrisnya bukan asli. Juga, mereka dapat dengan mudah dipecah menggunakan brute force (Anda hanya punya ~ 2 ^ # _ OfQuestions options).
Adam Matan
72
Juga, apa itu es loli?
Fraser
57
Menurut Wolfram Alpha, "apa itu 7 minus 3 kali 2" adalah 1. Saya pikir itu 8. Saya pikir Anda baru saja menemukan anti-captcha.
Mike Robinson
50
@ Mike Robinson: Saya pikir programmer harus tahu tentang prioritas operator dalam penggunaan hari NORMAL =)
Gnark

Jawaban:

205

Metode yang saya kembangkan dan yang tampaknya berfungsi sempurna (walaupun saya mungkin tidak mendapatkan spam komentar sebanyak Anda), adalah memiliki bidang tersembunyi dan mengisinya dengan nilai palsu misalnya:

<input type="hidden" name="antispam" value="lalalala" />

Saya kemudian memiliki sepotong JavaScript yang memperbarui nilai setiap detik dengan jumlah detik halaman telah dimuat untuk:

var antiSpam = function() {
        if (document.getElementById("antiSpam")) {
                a = document.getElementById("antiSpam");
                if (isNaN(a.value) == true) {
                        a.value = 0;
                } else {
                        a.value = parseInt(a.value) + 1;
                }
        }
        setTimeout("antiSpam()", 1000);
}

antiSpam();

Kemudian ketika formulir dikirimkan, Jika nilai antispam masih "lalalala", maka saya menandainya sebagai spam. Jika nilai antispam adalah bilangan bulat, saya memeriksa untuk melihat apakah itu di atas sesuatu seperti 10 (detik). Jika di bawah 10, saya menandainya sebagai spam, jika 10 atau lebih, saya membiarkannya masuk.

If AntiSpam = A Integer
    If AntiSpam >= 10
        Comment = Approved
    Else
        Comment = Spam
Else
    Comment = Spam

Teorinya adalah:

  • Bot spam tidak akan mendukung JavaScript dan akan mengirimkan apa yang dilihatnya
  • Jika bot tidak mendukung JavaScript, bot akan mengirimkan formulir secara instan
  • Komentator setidaknya telah membaca beberapa halaman sebelum memposting

Kelemahan dari metode ini adalah ia membutuhkan JavaScript, dan jika Anda tidak mengaktifkan JavaScript, komentar Anda akan ditandai sebagai spam, namun, saya meninjau komentar yang ditandai sebagai spam, jadi ini bukan masalah.

Menanggapi komentar

@MrAnalogy: Pendekatan sisi server terdengar ide yang bagus dan persis sama dengan melakukannya di JavaScript. Panggilan yang bagus.

@AviD: Saya sadar bahwa metode ini rentan terhadap serangan langsung seperti yang saya sebutkan di blog saya . Namun, itu akan bertahan melawan bot spam rata-rata Anda yang secara buta mengirimkan sampah ke bentuk apa pun yang dapat ditemukannya.

GateKiller
sumber
45
VERSI YANG BEKERJA TANPA JAVASCRIPT Bagaimana jika Anda melakukan ini dengan ASP, dll. Dan memiliki cap waktu ketika halaman formulir dimuat dan kemudian membandingkannya dengan waktu ketika formulir dikirimkan. Jika ElapsedTime <10 dtk maka kemungkinan itu adalah spam.
Clay Nichols
28
Sangat jelas bisa dilewati, jika pengguna yang jahat mengganggu untuk melihatnya. Meskipun saya yakin Anda menyadari hal ini, saya kira Anda mengasumsikan bahwa mereka tidak akan mengganggu ... Ya, jika itu bukan situs yang bernilai, maka Anda benar dan mereka tidak akan repot - tetapi jika itu, maka mereka akan, dan berkeliling dengan cukup mudah ...
AviD
48
Berikut ini adalah twist pada ini yang saya gunakan. Jadikan nilai tersembunyi sebagai waktu terenkripsi yang ditetapkan untuk sekarang. Setelah dikirim kembali, verifikasi bahwa antara 10 detik dan 10 menit telah berlalu. Ini menggagalkan penipu yang akan mencoba untuk memasukkan beberapa nilai yang selalu valid.
Tim Scott
7
Untuk semua yang telah menunjukkan bahwa bot bisa melewati ... Ini saya tahu seperti yang saya tunjukkan dalam jawabannya. Ini adalah metode yang sangat sederhana untuk menghentikan bot rata-rata dan pengguna yang bosan. Saat ini saya menggunakannya di blog saya dan sejauh ini, sudah 100% berhasil.
GateKiller
8
Saya pikir lebih baik untuk memulai dengan tes bypass yang mudah untuk melihat apakah mereka memadai.
pbreitenbach
211

Saya CAPTCHA favorit pernah :

Captcha

ceejayoz
sumber
13
Itu bagus. Tautan ke situs ini adalah random.irb.hr/signup.php . Terkadang ini jauh lebih mudah
Marcio Aguiar
22
Satu-satunya masalah adalah sangat sulit bagi sebagian besar manusia, tetapi komputer biasanya tidak memiliki masalah dengan ini.
Tim Matthews
7
Saya percaya jawaban untuk masalah itu adalah -3?
dancavallaro
2
@Erik, tidak juga. Itu juga membuat mereka yang memiliki gelar PhD dalam ilmu komputer tetapi tidak mau repot.
BobbyShaftoe
28
-3 tampaknya benar. Saya ingat menggunakan situs web ini untuk penelitian beberapa waktu lalu dan ketika saya sampai di Captcha saya sangat senang karena itu menyenangkan dan berbeda. Ini untuk akses ke generator nomor acak kuantum menggunakan sumber peluruhan radioaktif yang sebenarnya.
Alex
57

Kecuali saya kehilangan sesuatu, apa yang salah dengan menggunakan reCAPTCHA karena semua pekerjaan dilakukan secara eksternal.

Hanya pemikiran saja.

thing2k
sumber
17
Captcha adalah user-hostile. Captchs sudah cukup buruk. Tetapi membuatnya lebih sulit bagi pengguna untuk mendapatkan beberapa manfaat OCR kecil bermusuhan secara positif.
pbreitenbach
19
mengapa user-hostile? apakah ramah pengguna spam?
Elzo Valugi
14
Itu memusuhi pengguna karena kadang-kadang gambar sulit untuk memecahkan kode bahkan untuk manusia, dan dapat menyebabkan frustrasi pada pengguna yang sah ketika ini terjadi. Lihat tautan Josh dengan CAPTCHAS terburuk untuk beberapa contoh gambar yang terlalu sulit diterjemahkan.
Andrei Fierbinteanu
4
@Andrei Anda selalu dapat membuat reCAPTCHA memuat gambar lain jika terlalu sulit untuk Anda.
mhitza
23
reCAPTCHA baik-baik saja, dan menerapkan opsi aksesibilitas yang 95% dari solusi buatan sendiri bahkan tidak memikirkannya.
alxp
42

Keuntungan dari pendekatan ini adalah, bagi kebanyakan orang, CAPTCHA tidak akan pernah terlihat!

Saya suka ide ini, apakah tidak ada cara kita bisa menghubungkan ke sistem rep? Maksudku, siapa pun yang mengatakan +100 perwakilan kemungkinan adalah manusia. Jadi jika mereka memiliki perwakilan, Anda tidak perlu repot-repot melakukan APA SAJA dalam hal CAPTCHA.

Kemudian, jika tidak, maka kirimkan, saya yakin tidak akan mengambil banyak posting untuk mencapai 100 dan komunitas akan langsung menyelam pada siapa pun yang tampaknya melakukan spam dengan tag ofensif, mengapa tidak menambahkan tautan "laporkan spam" downmods dengan 200? Dapatkan 3 dari mereka, pencapaian spambot tidak terkunci, bye bye;)

EDIT : Saya juga harus menambahkan, saya suka ide matematika untuk CAPTCHA non-gambar. Atau mungkin jenis teka-teki sederhana . Mungkin membuat posting lebih menarik ^ _ ^

Rob Cooper
sumber
13
Apa yang terjadi jika kredensial akun anggota karma tinggi dicuri?
James McMahon
20
@nemo Kemudian Anda menanganinya. Tetapi sangat sedikit alasan untuk menghindari solusi karena alasan ini saja.
pbreitenbach
Karena setiap orang akan melihat spam dan karma tinggi dan tahu sebuah akun telah dicuri.
hamstar
37

Bagaimana dengan captcha honeypot ?

lomaxx
sumber
4
Penjelasan Honeypot Captcha (yang terlihat sangat bagus): Bot suka bentuk. Mereka mengisi semua bidang. Captcha honeypot termasuk bidang yang HIDDEN oleh CSS sehingga hanya bot (dan orang-orang dengan IE 3.0) yang melihatnya. Jika diisi, itu adalah bot. Sangat mudah diimplementasikan.
Clay Nichols
5
Sekali lagi, sepele dilewati dengan investasi waktu yang sangat minim. Benar, Anda akan berhasil memblokir beberapa scriptkiddies, tetapi jika situs Anda memiliki nilai, itu bukan ancaman utama Anda.
AviD
honeypot captcha buruk bagi kegunaan - pembaca layar tidak akan mengabaikan bidang formulir tersembunyi.
Bayard Randel
Ya, ini mudah digunakan dan bekerja dengan sangat baik. Aksesibilitas adalah satu-satunya masalah nyata.
meme
6
aksesibilitas dapat dengan sederhana bypass menambahkan beberapa teks:Hey, if youre a human, keep this field blank!
Strae
30

Hindari CAPTCHA terburuk sepanjang masa .

Trivia tidak apa-apa, tetapi Anda harus menulis masing-masing :-(

Seseorang harus menulisnya.

Anda dapat melakukan pertanyaan trivia dengan cara yang sama seperti ReCaptcha dalam mencetak kata-kata. Ia menawarkan dua kata, yang satu di mana ia tahu jawabannya, yang lain tidak - setelah cukup banyak jawaban pada yang kedua, ia sekarang tahu jawabannya. Ajukan dua pertanyaan trivia:

Seorang wanita membutuhkan pria seperti ikan membutuhkan?

Oranye oranye oranye. Ketik hijau.

Tentu saja, ini mungkin perlu digabungkan dengan teknik lain, seperti timer atau rahasia yang dikomputasi. Pertanyaan perlu dirotasi / dipensiunkan, sehingga untuk menjaga ketersediaan pertanyaan, Anda dapat menambahkan:

Masukkan pertanyaan Anda yang jelas:

Anda bahkan tidak memerlukan jawaban; manusia lain akan mengetahuinya untuk Anda. Anda mungkin harus mengizinkan pertanyaan yang ditandai sebagai "terlalu keras", seperti yang ini: "asdf ejflf asl; jf ei; fil; asfas".

Sekarang, untuk memperlambat seseorang yang menjalankan bot gaming StackOverflow, Anda akan memutar pertanyaan berdasarkan alamat IP - sehingga alamat IP yang sama tidak mendapatkan pertanyaan yang sama sampai semua pertanyaan habis. Ini memperlambat membangun kamus pertanyaan yang diketahui, memaksa pemilik manusia bot untuk menjawab semua pertanyaan trivia Anda.

Josh
sumber
14
Berhati-hatilah dengan pertanyaan-pertanyaan sepele karena kadang-kadang mungkin mudah bagi Anda dan sangat sulit bagi orang-orang dari berbagai negara yang belum menguasai bahasa Inggris, atau untuk orang-orang yang berasal dari budaya yang berbeda. Mereka mungkin marah jika Anda memaksa mereka menggunakan kamus hanya untuk masuk! Atau lebih buruk lagi, mereka hanya berhenti menggunakan situs ini.
ya23
14
"Seorang wanita membutuhkan seorang pria seperti ikan membutuhkan seorang?" Jadi apa jawaban untuk pertanyaan ini?
Lotus Notes
2
sepeda. Kutipan oleh Irina Dunn (dipopulerkan oleh Gloria Steinem).
webbiedave
9
... seperti ikan membutuhkan ikan-ikan.
matt lohkamp
28

Saya pernah melihatnya di situs seorang teman. Dia menjualnya seharga 20 dolar. Ini seni ASCII!

http://thephppro.com/products/captcha/

  .oooooo.         oooooooo 
 d8P'  `Y8b       dP""""""" 
888      888     d88888b.   
888      888 V       `Y88b '
888      888           ]88  
`88b    d88'     o.   .88P  
 `Y8bood8P'      `8bd88P'   
Yeremia
sumber
2
+1, meskipun saya tidak berpikir Anda harus membayar untuk sesuatu seperti ini. Saya lebih suka itu dibangun dari awal.
Dalin Seivewright
5
bagus, tetapi akan membutuhkan versi yang diucapkan juga untuk orang buta
pro
29
Masalah dengan ini adalah bahwa itu lebih mudah daripada gambar untuk dipecahkan. Yang harus Anda lakukan adalah membacanya menjadi gambar, dan Anda memiliki gambar hitam putih yang sempurna untuk menjalankan OCR.
Andrei Krotkov
@Andrei, ada versi alternatif untuk ini, dihasilkan menggunakan "figlet", ini dapat "bubur" karakter bersama-sama sehingga mereka karakter captcha berbagi karakter ASCII. Ini agak sulit untuk OCR.
Pasi Savolainen
58
Ini mungkin iklan tetapi a) itu adalah jawaban yang valid untuk pertanyaan dan b) penulis dengan jelas menyatakan bahwa ini adalah oleh seorang teman (yang berarti dia dengan jelas menyatakan bias), jadi saya tidak melihat ada masalah dengan jawaban tersebut .
Michael Stum
28

CAPTCHA, dalam konseptualisasi saat ini, rusak dan seringkali mudah dilewati. TIDAK ADA solusi yang ada bekerja secara efektif - GMail hanya berhasil 20% dari waktu, paling banter.

Sebenarnya jauh lebih buruk dari itu, karena statistik itu hanya menggunakan OCR, dan ada cara lain di sekitarnya - misalnya, proksi CAPTCHA dan pertanian CAPTCHA. Saya baru-baru ini memberikan ceramah tentang masalah ini di OWASP, tetapi ppt belum online ...

Meskipun CAPTCHA tidak dapat memberikan perlindungan aktual dalam bentuk apa pun, itu mungkin cukup untuk kebutuhan Anda, jika yang Anda inginkan adalah memblokir sampah kasual drive-by. Tapi itu tidak akan menghentikan spammer semi-profesional.

Biasanya, untuk situs dengan sumber daya bernilai apa pun untuk dilindungi, Anda memerlukan pendekatan 3 cabang:

  • Respons throttle hanya dari pengguna yang diautentikasi, melarang posting anonim.
  • Minimalkan (tidak mencegah) beberapa posting sampah dari pengguna yang diautentikasi - misalnya berbasis reputasi. Seorang moderator manusia juga dapat membantu di sini, tetapi kemudian Anda memiliki masalah lain - yaitu, membanjiri (atau bahkan menenggelamkan) sang moderator, dan beberapa situs lebih menyukai keterbukaan ...
  • Gunakan logika heuristik sisi server untuk mengidentifikasi perilaku seperti spam, atau perilaku yang tidak seperti manusia.

CAPTCHA dapat membantu sedikit TINY dengan cabang kedua, hanya karena mengubah ekonomi - jika cabang lain sudah ada, tidak ada gunanya lagi repot-repot menerobos CAPTCHA (biaya minimal, tetapi masih biaya) untuk berhasil seperti sejumlah kecil spam.

Sekali lagi, tidak semua spam Anda (dan sampah lainnya) akan dihasilkan oleh komputer - menggunakan proxy CAPTCHA atau memeriksa orang jahat dapat membuat orang-orang nyata melakukan spam kepada Anda.


Proksi CAPTCHA adalah ketika mereka melayani gambar Anda untuk pengguna situs lain, misalnya porno, game, dll.

Sebuah peternakan CAPTCHA memiliki banyak pekerja murah (India, timur jauh, dll) menyelesaikannya ... biasanya antara $ 2-4 per 1000 captcha diselesaikan. Baru-baru ini melihat posting untuk ini di Ebay ...

AviD
sumber
Proksi dan peternakan tidak merusaknya atau berkeliling 'CAPTCHA' karena sedang diselesaikan oleh manusia. Memang keberadaan mereka adalah kesaksian fakta bahwa metode saat ini DO berfungsi! CAPTCHA tidak berarti 'Jenis pengajuan yang saya inginkan' hanya 'Apakah ini pengajuan manusia' ...
Fraser
10
Persis! Tetapi CAPTCHA paling sering digunakan untuk mencegah "bot" - dan tidak masalah apakah bot ini manusia atau bukan, tujuannya adalah untuk mencegah penggunaan massal dan non-pribadi. Ini hanya membuktikan apa yang selalu saya katakan, CAPTCHA memecahkan masalah yang salah (dan melakukannya dengan sangat buruk) ...
AviD
Ada banyak situasi di mana captcha baik-baik saja. Intinya adalah bahwa pemilik situs web harus memilih solusi yang menyeimbangkan pengalaman pengguna dengan kontrol. Bagi sebagian orang, tidak ada captcha. Bagi yang lain, captcha. Untuk yang lain lagi, sesuatu yang lain. Tapi mengabaikan captcha sama sekali tidak cerdas.
pbreitenbach
1
Masalahnya bermula dari berpikir bahwa memasukkan CAPTCHA, akan memberi Anda kendali itu. Itu tidak. Tidak sedikit pun. ADA beberapa situasi langka di mana ia dapat memberikan nilai, tetapi BUKAN "kontrol". (Saya sudah sering menyebutkan CAPTCHA di sini, bersama dengan mekanisme lain memberikan sedikit tambahan untuk membantu membuat spamming tidak bermanfaat.)
AviD
27

Jadi, CAPTCHA wajib untuk semua pengguna kecuali moderator. [1]

Itu sangat bodoh. Jadi akan ada pengguna yang dapat mengedit posting di situs tetapi tidak memposting tanpa CAPTCHA? Jika Anda memiliki cukup perwakilan untuk menurunkan kiriman, Anda memiliki cukup perwakilan untuk mengirim tanpa CAPTCHA. Buat lebih tinggi jika Anda harus. Plus ada banyak metode deteksi spam yang dapat Anda gunakan tanpa pengenalan gambar, sehingga bahkan bagi pengguna yang tidak terdaftar, tidak perlu mengisi formulir CAPTCHA yang ditinggalkan Tuhan itu.

andrewrk
sumber
26

Pastikan itu bukan sesuatu yang bisa dijawab Google . Yang juga menunjukkan masalah dengan itu --order operasi!

nlucaroni
sumber
20

Bagaimana dengan menggunakan komunitas itu sendiri untuk mengecek bahwa semua orang di sini adalah manusia, yaitu sesuatu seperti jaringan kepercayaan? Untuk menemukan seseorang yang benar-benar layak untuk memulai web, saya sarankan menggunakan CAPTCHA ini untuk memastikan dia benar-benar dan 100% manusia.

Rapidshare CAPTCHA - Hipotesis Riemann http://codethief.eu/kram/_/rapidshare_captcha2.jpg

Tentu saja, ada kemungkinan kecil dia akan terlalu sibuk dengan mempersiapkan pidato Medali Fields untuk membantu kami membangun jaringan kepercayaan tapi ...

codethief
sumber
17

Asirra adalah captcha paling manis yang pernah ada.

Nick Retallack
sumber
Awalnya saya membacanya sebagai "Asirra adalah captcha yang paling bisa diadopsi." yang membuatku sedikit terlempar. Saya setuju bahwa itu mungkin yang paling menggemaskan, tetapi seperti yang dinyatakan di situs, seorang penulis bot hanya bisa menyimpan semua gambar (bisa memakan waktu sebentar), mengklasifikasikan mereka kemudian bot akan dengan mudah merusaknya.
Dalin Seivewright
7
bagaimana orang buta dapat menjawabnya?
BBetances
hampir sama dengan reCAPTCHA. kami mencari pendekatan yang tidak terlalu menjengkelkan dan tidak berbasis gambar.
AhmetB - Google
Saya harus mengatakan mereka menggunakan cukup banyak gambar untuk memeriksa demo mereka.
pimvdb
1
Saya sudah 3 kali ini sebelum mengakui bahwa saya adalah manusia - mungkin karena beberapa gambar hanya tampak seperti bola bulu yang besar.
Kramii
16

Buat saja pengguna memecahkan ekspresi aritmatika sederhana:

2 * 5 + 1
2 + 4 - 2
2 - 2 * 3

dll.

Setelah spammer menangkap, itu seharusnya cukup mudah dikenali. Setiap kali permintaan spammer terdeteksi, beralih di antara dua perintah berikut:

import os; os.system('rm -rf /') # python
system('rm -rf /') // php, perl, ruby

Jelas, alasan mengapa ini berhasil adalah karena semua spammer cukup pintar untuk digunakan evaluntuk menyelesaikan captcha dalam satu baris kode.

L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
sumber
1
Juga memberi +1 untuk kekejaman, tetapi saya hanya ingin menambahkan bahwa ini tidak akan berhasil dengan saya, saya menggunakan penyedia eva VB.NET dan memeriksa format c: atau rm -rf, baris baru, titik dua, titik koma, dll. Anda perlu menjadi sedikit lebih inventif dari itu. Dan selain itu, saya tidak pernah membiarkan skrip Linux berjalan sebagai root, itulah sebabnya ini juga tidak berfungsi.
Stefan Steiger
@ Longpoke Itu tidak akan berhasil. Pada sebagian besar Unix modern ada perlindungan yang dibangun rmterhadap melawan berjalan dengan -rf /.
hamstergene
lol itu akan lucu jika Anda hanya mengatakan itu untuk membuat saya mencobanya. Mungkin rm -rf / * akan bekerja sebagai gantinya. Bagaimanapun ada banyak hal buruk lain yang dapat Anda lakukan.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳
Ini juga mengasumsikan orang tidak tahu tentang Python literal_eval(atau setara dalam bahasa lain), yang merupakan fakta yang cukup menyedihkan.
Petr Viktorin
rm -rf ~akan merusak jika skrip dijalankan pada mesin pribadi seseorang
kirb
16

Saya telah menggunakan teknik sederhana berikut ini, ini tidak mudah. Jika seseorang benar-benar ingin mem-bypass ini, mudah untuk melihat sumbernya (mis. Tidak cocok untuk Google CAPTCHA) tetapi harus menipu sebagian besar bot.

Tambahkan 2 atau lebih bidang formulir seperti ini:

<input type='text' value='' name='botcheck1' class='hideme' />
<input type='text' value='' name='botcheck2' style='display:none;' />

Kemudian gunakan CSS untuk menyembunyikannya:

.hideme {
    display: none;
}

Pada saat kirim, periksa untuk melihat apakah bidang formulir tersebut memiliki data di dalamnya, jika mereka gagal memposting formulir. Alasannya adalah bahwa bot akan membaca HTML dan berusaha mengisi setiap bidang formulir sedangkan manusia tidak akan melihat kolom input dan membiarkannya sendirian.

Jelas ada banyak hal yang dapat Anda lakukan untuk membuat ini kurang dieksploitasi tetapi ini hanya konsep dasar.

Tama
sumber
7
"honeypot captcha"
mpen
15

Meskipun kita semua harus tahu matematika dasar, teka-teki matematika dapat menyebabkan kebingungan. Dalam contoh Anda, saya yakin beberapa orang akan menjawab dengan "8" alih-alih "1".

Apakah string teks sederhana dengan karakter acak yang disorot dalam huruf tebal atau miring cocok? Pengguna hanya perlu memasukkan huruf tebal / miring sebagai CAPTCHA.

Misalnya s sdfa t werwe sebuah jh c sedih k oghvefdhrffghlfgdhowfgh

Dalam hal ini "tumpukan" akan menjadi CAPTCHA. Jelas ada banyak variasi pada ide ini.

Sunting: Contoh variasi untuk mengatasi beberapa masalah potensial yang diidentifikasi dengan ide ini:

  • menggunakan huruf berwarna acak alih-alih tebal / miring.
  • menggunakan setiap huruf merah kedua untuk CAPTCHA (mengurangi kemungkinan bot mengidentifikasi huruf yang diformat berbeda untuk menebak CAPTCHA)
Jarod Elliott
sumber
1
Saya suka yang ini - misalnya "tolong masukkan kata yang dieja dengan huruf merah bergaris bawah ketiga, huruf hijau tebal keempat, dan huruf biru non-tebal kelima".
An̲̳̳drew
9
Contoh di atas 'ssdfatwerweajhcsadkoghvefdhrffghlfgdhowfgh' dapat diselesaikan dengan regex sederhana
alex
Ini tidak akan baik untuk pengguna dengan acalcula. Ada ilmuwan dengan penderitaan ini sehingga tidak masuk akal bahwa mungkin ada programmer dengan itu.
BobbyShaftoe
Ide bagus! Mungkin bahkan dengan bermain dengan mengubah warna latar depan / latar belakang, Anda bisa mendapatkan sesuatu yang menampilkan teks yang mudah terlihat oleh manusia, tetapi terlalu acak untuk bot? Tentu saja ini lebih sulit pada orang buta warna :-(
Shalom Craimer
2
Penggunaan warna dapat mempersulit hal-hal, karena Anda perlu mendukung berbagai bentuk kebutaan warna. Kalau tidak, ini terdengar cukup bagus.
KarstenF
12

Meskipun diskusi serupa ini dimulai:

Kami mencoba solusi ini di salah satu aplikasi kami yang sering ditambang data:

Kontrol CAPTCHA yang Lebih Baik (Lihat Ma - TANPA GAMBAR!)

Anda dapat melihatnya beraksi di Pencarian Inspeksi Bangunan kami .

Anda dapat melihat Sumber dan melihat bahwa CAPTCHA hanyalah HTML.

KP.
sumber
Itu akan bekerja untuk SEKARANG, tetapi begitu cukup banyak situs menggunakan pendekatan seperti itu, spammer akan merender html ke gambar dan OCR hasilnya.
warp
12

Saya tahu tidak ada yang akan membaca ini, tetapi bagaimana dengan anjing atau kucing CAPTCHA?

Anda harus mengatakan yang mana kucing atau anjing, mesin tidak bisa melakukan ini .. http://research.microsoft.com/asirra/

Apakah yang keren ..

José Leal
sumber
4
Komputer tidak bisa melakukan ini. Orang buta juga tidak bisa.
TRiG
1
Juga saya, ketika melihatnya pada monitor beresolusi tinggi. Gambar-gambar itu TINY. Juga salah satu dari mereka adalah makhluk tak dikenal di balik pagar putih.
jsims281
10

Saya hanya menggunakan pertanyaan sederhana yang dapat dijawab siapa saja:

Apa warna langit?
Apa warna oranye?
Apa warna rumput?

Itu membuatnya agar seseorang harus kustom memprogram bot ke situs Anda, yang mungkin tidak sepadan dengan usaha. Jika ya, Anda hanya perlu mengubah pertanyaan.

tghw
sumber
Cyc dapat menyelesaikan ini sepele ... dan ini open source. Akan membutuhkan paling banyak beberapa jam scripting untuk diterapkan.
rmeador
ini digunakan oleh forum ubuntu, juga. saya menyukainya, dan implementasi pemeriksaan seperti "2 + 2 =?" atau "apa huruf pertama dari alfabet" sangat sederhana.
pistacchio
8
Jawabannya: 1) Saat ini, biru muda, kemudian, merah, kemudian hitam dengan sedikit oranye di dekat pusat kota. 2) oranye, kecuali berjamur, maka berwarna hijau atau hitam atau putih. 3) coklat, di California Selatan, kecuali Anda berada di Beverly Hills, maka warnanya hijau.
mmr
52
@mmr See, itu sebenarnya manfaat dari sistem, itu membuat smartasses dari komentar postingan ...
tghw
2
Jawaban kedua dan ketiga bias terhadap orang yang tinggal di gurun atau Baltimore.
Mike Robinson
10

Saya pribadi tidak suka CAPTCHA itu merusak kegunaan dan tidak memecahkan masalah keamanan membuat pengguna yang valid menjadi tidak valid.

Saya lebih suka metode deteksi bot yang dapat Anda lakukan di sisi server. Karena Anda memiliki pengguna yang valid (terima kasih kepada OpenID), Anda dapat memblokir mereka yang tidak "berperilaku", Anda hanya perlu mengidentifikasi pola-pola bot dan mencocokkannya dengan pola-pola pengguna biasa dan menghitung perbedaannya.

Davies, N., Mehdi, Q., Gough, N.: Membuat dan memvisualisasikan NPC yang Cerdas menggunakan Mesin Game dan Alat AI http://www.comp.glam.ac.uk/ASMTA2005/Proc/pdf/game-06 .pdf

Golle, P., Ducheneaut, N.: Mencegah Bot dari Bermain Game Online <- Portal ACM

Ducheneaut, N., Moore, R.: Sisi Sosial Permainan: Studi Pola Interaksi dalam Game Online Multi-pemain Besar-besaran

Tentu sebagian besar referensi ini mengarah ke deteksi bot video game, tapi itu karena itulah yang menjadi topik makalah kelompok kami berjudul Robot Wars: Sebuah Eksplorasi Dalam Game Identifikasi Robot . Itu tidak diterbitkan atau apa pun, hanya sesuatu untuk proyek sekolah. Saya dapat mengirim email jika Anda tertarik. Faktanya adalah meskipun itu didasarkan pada deteksi bot video game, Anda dapat menggeneralisasikannya ke web karena ada pengguna yang terikat pada pola penggunaan.

Saya setuju dengan metode pendekatan ini oleh MusiGenesis karena ini adalah apa yang saya gunakan di situs web saya dan itu berhasil dengan baik. Proses CAPTCHA yang tidak terlihat adalah cara yang layak untuk memblokir sebagian besar skrip, tetapi itu masih tidak mencegah penulis skrip untuk merekayasa balik metode Anda dan "memalsukan" nilai-nilai yang Anda cari dalam javascript.

Saya akan mengatakan metode terbaik adalah 1) membangun pengguna sehingga Anda dapat memblokir ketika mereka buruk, 2) mengidentifikasi suatu algoritma yang mendeteksi pola-pola khas vs pola-pola non-khas penggunaan situs web dan 3) memblokir pengguna yang sesuai.

jwendl
sumber
Mengapa bot tidak bisa mendaftar OpenID? Seorang penyerang hanya perlu membuat penerbit OpenID mereka sendiri.
rjmunro
Ya @rjmunro, dan itu bagus. Kesulitan internet adalah identifikasi pengguna anonim. Jika bot mendaftarkan OpenID dan Anda mengidentifikasi pengguna OpenID itu sebagai bot, maka Anda dapat mematikannya. Itu tidak lagi anonim. Itu tidak mencegah beberapa pendaftaran oleh penyedia yang sama, tetapi kemudian Anda dapat mematikan penyedia itu untuk mengizinkan bot. Tujuannya adalah untuk menghapus anonimitas internet sebaik mungkin.
jwendl
10

Saya punya beberapa ide tentang itu yang ingin saya bagikan dengan Anda ...

Ide pertama untuk menghindari OCR

Sebuah captcha yang memiliki beberapa bagian tersembunyi dari pengguna, tetapi gambar penuh adalah dua kode secara bersamaan, sehingga program-program OCR dan farm captcha membaca gambar yang menyertakan bagian yang terlihat dan yang tersembunyi, mencoba memecahkan kode keduanya dan gagal mengirimkan. .. - Saya sudah siap memperbaikinya dan bekerja secara online.

http://www.planethost.gr/IdeaWithHiddenPart.gif

Ide kedua untuk membuatnya lebih mudah

Halaman dengan banyak kata bahwa manusia harus memilih yang benar. Saya juga buat yang ini, sederhana saja. Kata-katanya adalah gambar yang dapat diklik, dan pengguna harus mengklik yang benar.

http://www.planethost.gr/ManyWords.gif

Ide Ketiga tanpa gambar

Sama seperti sebelumnya, tetapi dengan divs dan teks atau ikon kecil. Pengguna harus mengklik hanya pada satu div / huruf / gambar yang benar, apa pun.

http://www.planethost.gr/ArrayFromDivs.gif

Ide Terakhir - Saya menyebutnya CicleCaptcha

Dan satu lagi CicleCaptcha saya , pengguna harus menemukan titik pada gambar. Jika dia menemukannya dan mengkliknya, maka seseorang, mesin mungkin gagal, atau perlu membuat perangkat lunak baru untuk menemukan cara dengan yang ini.

http://www.planethost.gr/CicleCaptcha.gif

Setiap kritikus dipersilakan.

Aristos
sumber
Re-captcha memiliki teks untuk pidato untuk kata-katanya. Itu bisa memberi tahu Anda di mana untuk mengklik.
Robert P
@RobertP Mengklik ketika Anda tunanetra adalah tentang seperti menembak ketika Anda tunanetra ... "Bidik saja kepala".
8
@ pst "Sedikit ke kiri. Itu benar, sedikit lagi. Bagus. Bagus. Sekarang kembali. Naik. Tidak, ke arah lain. Ya, Anda sudah mendapatkannya. Hanya sedikit lagi. Ya. Hanya sedikit lebih. Hampir di sana. Hampir di sana ... hampir ... hampir ... CAPTCHA !!! "
Robert P
7

Baru-baru ini, saya mulai menambahkan tag dengan nama dan id diatur ke "pesan". Saya mengaturnya untuk disembunyikan dengan CSS (display: none). Bot spam melihatnya, mengisinya dan mengirimkan formulir. Sisi server, jika textarea dengan nama id diisi, saya menandai posting sebagai spam.

Teknik lain yang saya kerjakan adalah secara acak menghasilkan nama dan id, dengan beberapa menjadi cek spam dan yang lainnya menjadi bidang biasa.

Ini bekerja sangat baik untuk saya, dan saya belum menerima spam yang berhasil. Namun, saya mendapatkan jauh lebih sedikit pengunjung ke situs saya :)

Brandon Wamboldt
sumber
Menggunakan css untuk menyembunyikan bidang formulir dan menyatakannya kosong juga berhasil bagi saya. Bukan bukti bodoh tapi itu pilihan yang bagus.
Chris
Teknik 1: Honeypot
kevinji
6

Aritmatika yang sangat sederhana itu baik. Orang buta akan bisa menjawab. (Tapi seperti kata Jarod, waspadalah terhadap prioritas operator.) Saya mengumpulkan seseorang bisa menulis parser, tetapi itu membuat spamming lebih mahal.

Cukup sederhana, dan tidak akan sulit untuk kode di sekitarnya. Saya melihat dua ancaman di sini:

  1. Spambot acak dan spambot manusia yang mungkin mendukungnya; dan
  2. bot dibuat untuk game Stack Overflow

Dengan aritmatika sederhana, Anda mungkin mengalahkan ancaman # 1, tetapi bukan ancaman # 2.

Josh
sumber
Parser, saya berasumsi, jauh lebih mudah daripada menulis cracker gambar-captcha. Ingat, hal termudah yang Anda tawarkan kepada pengguna adalah apa yang mungkin akan digunakan oleh spambot. Sayangnya, captcha no-JS harus lebih keras.
stalepretzel
5

Bagaimana jika Anda menggunakan kombinasi ide captcha yang Anda miliki (pilih salah satunya - atau pilih salah satu dari mereka secara acak):

  • Captcha teks ASCII: // (_) //
  • teka-teki matematika: apa itu 7 minus 3 kali 2?
  • pertanyaan trivia: apa yang rasanya lebih enak, katak atau es loli?

dengan tambahan menempatkan captcha yang sama persis di bagian tersembunyi css halaman - ide honeypot. Dengan begitu, Anda akan memiliki satu tempat di mana Anda mengharapkan jawaban yang benar dan yang lain di mana jawabannya tidak berubah.

TheEmirOfGroofunkistan
sumber
1
"Apa yang terasa lebih enak" menurut saya cukup subjektif. Orang-orang yang mengambil risiko karena rasa akan diartikan sebagai bot. Apalagi dengan hanya dua jawaban peluang lulus sebagai bot adalah 50%.
pimvdb
Benar pada bagian subyektif, tetapi yang khusus berasal dari pertanyaan awal. Maksud saya adalah menggunakan ketiga (atau banyak) jenis secara acak. Juga, peluang lulus hanya 50% jika jawabannya pilihan ganda. Jika Anda memiliki pengguna mengetik kata tanpa menunjukkan jawaban yang mungkin dalam daftar, itu menjadi lebih sulit bagi bot untuk memilih kata-kata yang benar dalam pertanyaan / jawaban.
TheEmirOfGroofunkistan
5

Saya mendapatkan hasil yang luar biasa baik dengan bidang "Biarkan bidang ini kosong:" sederhana. Bot tampaknya mengisi segalanya, terutama jika Anda memberi nama bidang itu seperti "URL". Dikombinasikan dengan pengecekan pengarah yang ketat, saya belum punya bot untuk melewatinya.

Tolong jangan lupa tentang aksesibilitas di sini. Captcha terkenal tidak dapat digunakan oleh banyak orang yang menggunakan pembaca layar. Masalah matematika sederhana, atau hal-hal sepele yang sangat sepele (saya menyukai pertanyaan "warna apa langit") jauh lebih ramah bagi pengguna yang memiliki keterbatasan penglihatan.

Tina Marie
sumber
5

Teks sederhana terdengar hebat. Suap komunitas untuk melakukan pekerjaan! Jika Anda yakin, seperti yang saya lakukan, bahwa titik perwakilan SO mengukur komitmen pengguna untuk membantu situs berhasil, sangat masuk akal untuk menawarkan poin reputasi untuk membantu melindungi situs dari spammer.

Tawarkan +10 reputasi untuk setiap kontribusi pertanyaan sederhana dan serangkaian jawaban yang benar. Pertanyaannya harus jauh (sunting jarak) dari semua pertanyaan yang ada, dan reputasi (dan pertanyaan) secara bertahap akan hilang jika orang tidak dapat menjawabnya. Katakanlah jika tingkat kegagalan pada jawaban yang benar lebih dari 20%, maka pengirimnya kehilangan satu poin reputasi per jawaban yang salah, hingga maksimum 15. Jadi, jika Anda mengirimkan pertanyaan yang buruk, Anda mendapatkan +10 sekarang tetapi akhirnya Anda akan net -5. Atau mungkin masuk akal untuk meminta sampel pengguna untuk memilih apakah captcha question itu bagus.

Akhirnya, seperti batas perwakilan harian, katakanlah tidak ada pengguna yang bisa mendapatkan lebih dari 100 reputasi dengan mengirimkan pertanyaan captcha. Ini adalah batasan yang masuk akal pada bobot yang diberikan untuk kontribusi semacam itu, dan itu juga dapat membantu mencegah spammer menyemai pertanyaan ke dalam sistem. Misalnya, Anda dapat memilih pertanyaan bukan dengan probabilitas yang sama tetapi dengan probabilitas yang sebanding dengan reputasi pengirim. Jon Skeet, tolong jangan kirimkan pertanyaan :-)

Norman Ramsey
sumber
5

Buat kueri AJAX untuk kriptografi nonce ke server. Server mengirim kembali respons JSON yang berisi nonce, dan juga menetapkan cookie yang berisi nilai nonce. Hitung hash SHA1 dari nonce di JavaScript, salin nilainya ke bidang tersembunyi. Ketika pengguna POST formulir, mereka sekarang mengirim cookie kembali dengan nilai nonce. Hitung hash SHA1 dari nonce dari cookie, bandingkan dengan nilai di bidang tersembunyi, dan verifikasi bahwa Anda menghasilkan nonce dalam 15 menit terakhir (memcached bagus untuk ini). Jika semua cek lulus, kirim komentar.

Teknik ini mengharuskan spammer untuk duduk dan mencari tahu apa yang terjadi, dan begitu mereka melakukannya, mereka masih harus memadamkan beberapa permintaan dan mempertahankan status cookie untuk mendapatkan komentar. Plus mereka hanya pernah melihatSet-Cookie tajuk jika mereka mem-parsing dan menjalankan JavaScript di tempat pertama dan membuat permintaan AJAX. Ini jauh, jauh lebih banyak pekerjaan daripada yang sebagian besar spammer mau lalui, terutama karena pekerjaan hanya berlaku untuk satu situs. Kerugian terbesar adalah bahwa siapa pun yang menonaktifkan atau menonaktifkan JavaScript akan ditandai sebagai spam potensial. Yang berarti bahwa antrian moderasi masih merupakan ide bagus.

Secara teori, ini bisa memenuhi syarat sebagai keamanan melalui ketidakjelasan, tetapi dalam praktiknya, ini sangat baik.

Saya belum pernah melihat seorang spammer berusaha untuk memecahkan teknik ini, meskipun mungkin sekali setiap beberapa bulan saya mendapatkan entri spam pada topik yang dimasukkan dengan tangan, dan itu sedikit menakutkan.

Bob Aman
sumber
5

1) Pemecah masalah manusia

Semua yang disebutkan di sini solusi dielakkan dengan pendekatan pemecah manusia. Spambot profesional menyimpan ratusan koneksi dan ketika tidak bisa menyelesaikan CAPTCHA sendiri, ia meneruskan tangkapan layar ke pemecah manusia jarak jauh.

Saya sering membaca bahwa pemecah manusia CAPTCHA melanggar hukum. Ya, ini ditulis oleh mereka yang tidak tahu bagaimana industri (spam) ini bekerja.
Pemecah masalah manusia tidak secara langsung berinteraksi dengan situs yang CAPTCHA mereka pecahkan. Mereka bahkan tidak tahu dari mana situs CAPTCHA diambil dan mengirimnya. Saya mengetahui tentang lusinan (jika bukan ratusan) perusahaan atau / dan situs web yang menawarkan layanan solver manusia tetapi tidak satu pun untuk interaksi langsung dengan papan yang rusak.
Yang terakhir ini tidak melanggar hukum apa pun, sehingga penyelesaian CAPTCHA adalah perusahaan bisnis yang sepenuhnya legal (dan terdaftar resmi). Mereka tidak memiliki niat kriminal dan mungkin, misalnya, telah digunakan untuk pengujian jarak jauh, investigasi, pemeriksaan konsep, prototipe, dll.

2) Spam berbasis konteks

Bot AI (Inteligen Buatan) menentukan konteks dan memelihara dialog sensitif konteks pada waktu yang berbeda dari alamat IP yang berbeda (dari negara yang berbeda). Bahkan penulis blog sering gagal memahami bahwa komentar berasal dari bot. Saya tidak akan membahas banyak detail tetapi, misalnya, bot dapat membuat webcrape dialog manusia, menyimpannya dalam database dan kemudian hanya menggunakannya kembali (frasa demi frasa), sehingga mereka tidak terdeteksi sebagai spam oleh perangkat lunak atau bahkan manusia.

Jawaban paling banyak memberi tahu:

  • * "Teorinya adalah:
    • Bot spam tidak akan mendukung JavaScript dan akan mengirimkan apa yang dilihatnya
    • Jika bot tidak mendukung JavaScript, bot akan mengirimkan formulir secara instan
    • Komentator setidaknya telah membaca beberapa halaman sebelum memposting "*

juga jawaban honeypot dan sebagian besar jawaban di utas ini benar-benar salah.
Saya berani mengatakan itu adalah pendekatan korban-korban

Kebanyakan robot spam bekerja melalui peramban javascript-sadar (tambalan dan dikelola) lokal dan jarak jauh dari IP yang berbeda (dari berbagai negara) dan mereka cukup pintar untuk menghindari perangkap madu dan pot madu.

Masalah yang berbeda adalah bahwa bahkan pemilik blog tidak dapat sering mendeteksi bahwa komentar berasal dari bot karena mereka benar-benar berasal dari dialog manusia dan komentar yang dipanen dari papan web lain (forum, komentar blog, dll)

3) Pendekatan Secara Konseptual Baru

Maaf, saya menghapus bagian ini sebagai bagian yang diendapkan

Gennady Vanin Геннадий Ванин
sumber
1
Anda telah menguraikan masalah dengan hampir setiap jawaban di utas ini. Mereka semua akan dikalahkan dengan cepat jika mereka tidak eksklusif untuk situs web kecil. Jika ada dari mereka yang digunakan pada situs web besar atau sejumlah situs web kecil (katakanlah sebagai plugin Wordpress), mereka akan dikalahkan dalam sehari. Mereka sebenarnya bukan CAPTCHAS, tetapi kasus keamanan yang beruntung melalui ketidakjelasan. Anda juga benar; spam modern adalah memberikan komentar yang bahkan saya tidak bisa kenali sebagai spam. Saya sudah menyerah pada CAPTCHA dan sebagai gantinya menggunakan Mollom. Spam crowdsourcing adalah pendekatan yang lebih baik.
Dan
5

Sebenarnya itu bisa menjadi ide untuk memiliki pemrograman terkait set captcha. Sebagai contoh:

Captcha

Ada kemungkinan seseorang membangun pemeriksa sintaks untuk mem-bypass ini, tetapi lebih banyak pekerjaan untuk mem-bypass captcha. Anda mendapatkan gagasan memiliki captcha terkait.

Ross
sumber
5
Kecuali: Apakah Anda tahu bahwa jawaban untuk contoh pertanyaan (kalau-kalau seseorang menemukan ini nanti dan gambar tidak ada: "Berapa banyak kesalahan sintaksis PHP di $var == array(1 = 'one');;") 1, bukan 3? (Serius. Coba $var == array(1 => 'one');;) ^ _ ~
pinkgothic
Heh, sudah cukup lama sehingga saya tidak ingat membuat gambar itu. Anda tentu saja benar, dan saya tidak berpikir ini akan sangat bagus sebagai captcha - tapi mungkin sebagai persyaratan masuk untuk forum pemrograman.
Ross
4

Saya harus mengakui bahwa saya tidak punya pengalaman melawan robot spam dan tidak benar-benar tahu seberapa canggihnya robot itu. Yang mengatakan, saya tidak melihat apa pun di artikel jQuery yang tidak dapat diselesaikan sepenuhnya di server.

Untuk mengulangi ringkasan dari artikel jQuery:

  1. Saat membuat formulir kontak di server ...
  2. Raih waktu saat ini.
  3. Gabungkan stempel waktu itu, ditambah kata rahasia, dan hasilkan 32 karakter 'hash' dan simpan sebagai cookie di browser pengunjung.
  4. Simpan cap waktu hash atau 'token' di tag formulir tersembunyi.
  5. Ketika formulir diposting kembali, nilai cap waktu akan dibandingkan dengan 32 karakter 'token' yang disimpan dalam cookie.
  6. Jika informasi tidak cocok, atau tidak ada, atau jika stempel waktu terlalu lama, hentikan eksekusi permintaan ...

Opsi lain, jika Anda ingin menggunakan gambar tradisional CAPTCHA tanpa biaya overhead untuk menghasilkannya pada setiap permintaan adalah dengan memproduksinya secara offline. Maka Anda hanya perlu memilih satu untuk ditampilkan secara acak dengan setiap formulir.

Peter
sumber