Görüntü tabanlı olmayan pratik CAPTCHA yaklaşımları?


318

Stack Overflow'a CAPTCHA desteği ekleyeceğiz gibi görünüyor . Bu, botları, spam gönderenleri ve diğer kötü amaçlı komut dosyası etkinliklerini önlemek için gereklidir. Sadece insanların burada bir şeyler göndermesini veya düzenlemesini istiyoruz!

İlk savunma hattı olarak bir JavaScript (jQuery) CAPTCHA kullanacağız:

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

Bu yaklaşımın avantajı, çoğu insan için CAPTCHA'nın hiçbir zaman görünmeyeceğidir!

Ancak, JavaScript devre dışı bırakılmış kişiler için, yine de bir yedeklemeye ihtiyacımız var ve bu da zorlaşıyor.

ASP.NET için yeniden kullanabileceğimiz geleneksel bir CAPTCHA denetimi yazdım .

CAPTCHA görseli

Ancak, tüm bu görüntüleri sunucuda her istekle oluşturmanın yükünü önlemek için metinsel bir şeyle gitmeyi tercih ederim.

Şöyle şeyler gördüm ..

  • ASCII metin güvenlik kodu: \/\/(_)\/\/
  • matematik bulmaca: 7 eksi 3 çarpı 2 nedir?
  • trivia sorular: daha iyi olanı, bir kurbağa veya bir buzlu şeker?

Belki burada sadece yel değirmenlerini eğiyorum, ancak <noscript>mümkünse daha az kaynak yoğun, görüntü tabanlı olmayan uyumlu bir CAPTCHA'ya sahip olmak istiyorum.

Fikirler?


16
Sunucuda bir görüntü oluşturmaya gerek yoktur. Sadece isteği yerine getirmeniz gerekiyor. Örneğin, <img src = "createImage.aspx? Guid = blah">
Brian R. Bondy

58
Diğer bilgiler soruları kültürel yanlılığa eğilimlidir (sorunuza cevap veren Fransız bir adam düşünün ...). Ayrıca, İngilizcesi anadili olmayan kullanıcılarla da mücadele edebilirler. Ayrıca, kaba kuvvet kullanılarak kolayca kırılabilirler (sadece ~ 2 ^ # _ OfQuestions seçenekleriniz vardır).
Adam Matan

72
Ayrıca, bir popsicle nedir?
Fraser

57
Wolfram Alpha'ya göre, "7 eksi 3 çarpı 2 nedir" 1'dir. 8 olduğunu düşündüm. Sanırım sadece anti-captcha'yı icat ettin.
Mike Robinson

50
@Mike Robinson: Programcıların NORMAL günlük kullanımda operatör önceliği hakkında bilgi sahibi olmaları gerektiğini düşünüyorum =)
Gnark

Yanıtlar:


205

Geliştirdiğim ve mükemmel çalışıyor gibi görünen bir yöntem (muhtemelen sizin kadar çok yorum spam alamasam da), gizli bir alana sahip olmak ve sahte bir değerle doldurmaktır:

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

Sonra sayfanın yüklendiği saniye sayısı ile değeri her saniye güncelleyen bir JavaScript parçası var:

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();

Sonra form gönderildiğinde, antispam değeri hala "lalalala" ise, spam olarak işaretlerim. Antispam değeri bir tamsayı ise, 10 (saniye) gibi bir değerin üzerinde olup olmadığını kontrol ederim. 10'un altındaysa, spam olarak işaretlerim, 10 veya daha fazla ise, izin verdim.

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

Teori şu şekildedir:

  • Spam botu JavaScript'i desteklemez ve gördüklerini gönderir
  • Bot JavaScript'i destekliyorsa formu anında gönderir
  • Yorum yapan kişi göndermeden önce sayfanın en azından bir kısmını okudu

Bu yöntemin dezavantajı, JavaScript gerektirmesidir ve JavaScript'iniz etkinleştirilmemişse, yorumunuz spam olarak işaretlenecektir, ancak spam olarak işaretlenmiş yorumları gözden geçiriyorum, bu yüzden bu bir sorun değil.

Yorumlara yanıt

@MrAnalogy: Sunucu tarafı yaklaşımı kulağa iyi bir fikir gibi geliyor ve bunu JavaScript'te yapmakla tamamen aynı. İyi karar.

@AviD: Üzerinde belirttiğimiz gibi bu yöntem direkt saldırılara eğilimli farkındayım bloguma . Ancak, bulabileceği herhangi bir forma körü körüne gönderen ortalama spam botunuza karşı savunacaktır.


45
JAVASCRIPT OLMADAN ÇALIŞAN SÜRÜM ASP ile vb. ElapsedTime <10 sn ise, büyük olasılıkla spam'dir.
Clay Nichols

28
Kötü niyetli bir kullanıcı ona bakmak rahatsız ederse, çok açık bir şekilde atlanabilir. Bunun farkında olduğunuzdan emin olmakla birlikte, sanırım rahatsız etmeyeceklerini varsayıyorsunuz ... Eh, eğer herhangi bir değere sahip bir site değilse, haklısınız ve rahatsız etmeyecekler - ama öyle, o zaman yapacaklar ve yeterince kolay
dolaşacaklar

48
İşte benim kullandığım bir bükülme. Gizli değeri şu anda ayarlanmış şifreli bir zaman yapın. Geri gönderildikten sonra 10 saniye ile 10 dakika arasında sürenin geçtiğini doğrulayın. Bu, her zaman geçerli bir değer girmeye çalışan hileleri folyolar.
Tim Scott

7
Botların geçebileceğini belirten herkese ... Bu cevabı belirttiğim gibi biliyorum. Ortalama bot ve sıkılmış kullanıcılarınızı durdurmak için çok basit bir yöntemdir. Şu anda blogumda kullanıyorum ve şimdiye kadar% 100 başarılı oldu.
GateKiller

8
Bence, yeterli olup olmadıklarını görmek için kolay atlanabilir testlerle başlamak daha iyidir.
pbreitenbach

211

13
Bu harika. Sitenin bağlantısı random.irb.hr/signup.php'dir . Bazen çok daha kolay
Marcio Aguiar

22
Tek sorun, insanların çoğunluğu için gerçekten zor olmasıdır, ancak bilgisayarların genellikle bu konuda bir sorunu olmayacaktır.
Tim Matthews

7
Bu sorunun cevabının -3 olduğuna inanıyorum?
dancavallaro

2
@Erik, pek değil. Ayrıca bilgisayar bilimlerinde doktora sahibi olan ancak rahatsız etmek istemeyenleri de korur.
BobbyShaftoe

28
-3 doğru görünüyor. Bir süre önce araştırma için bu web sitesini kullandığımı hatırlıyorum ve Captcha'ya geldiğimde çok mutluydum çünkü eğlenceli ve farklıydı. Gerçek bir radyoaktif bozunma kaynağı kullanarak kuantum rasgele sayı üretecine erişim içindir.
Alex

57

Bir şeyi kaçırmadıkça, reCAPTCHA'yı kullanmanın yanlış olması , tüm işler dışarıdan yapıldığı için.

Sadece bir düşünce.


17
Re-captcha kullanıcı dostudur. Kaptanlar yeterince kötü. Ancak, küçük OCR avantajı elde etmek için kullanıcılar için daha zor hale getirmek olumlu bir şekilde düşmanca.
pbreitenbach

19
neden kullanıcı düşmanıdır? spam kullanıcı dostu mudur?
Elzo Valugi

14
Kullanıcı tarafından düşmancadır, çünkü bazen insanlar için bile görüntülerin kodunu çözmek zordur ve bu olduğunda meşru kullanıcılarda hayal kırıklığına neden olabilir. Kodları çözmek için aşırı zor bazı örnekler için Josh'un en kötü CAPTCHAS ile bağlantısına bakın.
Andrei Fierbinteanu

4
@Andrei, reCAPTCHA'nın sizin için çok zorsa başka bir görüntü yüklemesini sağlayabilirsiniz.
mhitza

23
reCAPTCHA iyidir ve evde yetiştirilen çözümlerin% 95'inin bile düşünmediği bir erişilebilirlik seçeneği uygular.
alxp

42

Bu yaklaşımın avantajı, çoğu insan için CAPTCHA'nın hiçbir zaman görünmeyeceğidir!

Bu fikri beğendim, sadece destek sistemine bağlanmamızın bir yolu yok mu? Yani, +100 temsilcisi olan herkesin insan olması muhtemeldir. Yani temsilcisi varsa, CAPTCHA açısından HERHANGİ bir şey yapmak bile zahmetine gerek yok.

Sonra, onlar değilse, o zaman göndermek, eminim 100 almak için pek çok mesaj almak alışkanlık ve topluluk anında rahatsız edici etiketleri ile spam spam gibi görünüyor, neden "spam spam" bağlantısı eklemiyorum o 200 kadar downmods? Bunlardan 3 tane alın, spambot başarısı açık, güle güle;)

EDIT : Ayrıca eklemeliyim, görüntü olmayan CAPTCHA için matematik fikrini seviyorum. Ya da belki basit bir bilmece türü şey. Gönderimi daha da ilginç hale getirebilir ^ _ ^


13
Yüksek karma üyelerin hesap kimlik bilgileri çalınırsa ne olur?
James McMahon

20
@nemo O zaman bununla başa çık. Ama sadece bu nedenle bir çözümden kaçınmak için çok az neden.
pbreitenbach

Çünkü herkes spam'ı ve yüksek karmayı görüp bir hesabın çalındığını biliyordu.
Hamstar

37

Bal küpü captcha'ya ne dersin ?


4
Honeypot Captcha'nın açıklaması (çok iyi görünüyor): Botlar formları sever. Bütün alanları dolduruyorlar. Bir bal küpü Captcha, CSS tarafından GİZLİ bir alan içerir, böylece sadece botlar (ve IE 3.0'ı olanlar) bunu görür. Dolu ise, bir bot. Uygulaması çok kolay.
Clay Nichols

5
Yine, çok az bir zaman yatırımı ile önemsiz bir şekilde atlanabilir. Doğru, bazı scriptkiddileri engellemeyi başaracaksınız, ancak sitenizin değeri varsa ana tehditiniz bu değildir.
AviD

bal küpü captcha'lar kullanılabilirlik açısından kötüdür - ekran okuyucular gizli form alanlarını göz ardı etmez.
Bayard Randel

Evet, dağıtımı basit ve gerçekten iyi çalışıyor. Erişilebilirlik tek gerçek sorundur.
meme

6
erişilebilirlik, bazı metinler ekleyerek basit bir şekilde atlanabilir:Hey, if youre a human, keep this field blank!
Strae

30

Tüm zamanların en kötü CAPTCHA'larından kaçının .

Diğer bilgiler iyi, ama her birini yazman gerekecek :-(

Birisi bunları yazmak zorunda kalacaktı.

Diğer soruları ReCaptcha'nın basılı kelimelerle aynı şekilde yapabilirsiniz. Biri cevabını bildiği, diğeri bilmediği iki kelime sunuyor - ikincisinde yeterli cevaptan sonra, şimdi de cevabını biliyor. İki trivia sorusu sorun:

Bir kadının balık gibi bir erkeğe ihtiyacı var mı?

Turuncu turuncu turuncu. Yeşil yazın.

Elbette, bunun zamanlayıcılar veya hesaplanan sırlar gibi diğer tekniklerle birleştirilmesi gerekebilir. Soruların döndürülmesi / emekli olması gerekir, bu nedenle soruları güncel tutmak için geçici olarak şunları ekleyebilirsiniz:

Açık sorunuzu girin:

Bir cevaba bile ihtiyacınız yok; diğer insanlar bunu sizin için çözeceklerdir. "Çok zor" olarak işaretleme sorularına şu şekilde izin vermeniz gerekebilir: "asdf ejflf asl; jf ei; fil; asfas".

Şimdi, StackOverflow oyun botu çalıştıran birini yavaşlatmak için, soruları IP adresine göre döndürürsünüz - böylece tüm sorular tükenene kadar aynı IP adresi aynı soruyu alamaz . Bu, bilinen soruların bir sözlüğünü oluşturmayı yavaşlatır, botların insan sahibini tüm trivia sorularınızı cevaplamaya zorlar.


14
Sadece önemsiz sorulara dikkat edin, çünkü bazen sizin için kolay olabilir ve farklı ülkelerden İngilizce öğrenmemiş insanlar veya farklı kültürden gelen insanlar için inanılmaz derecede zor olabilir. Sadece giriş yapmak için sözlük kullanmaya zorlarsanız üzülebilirler! Ya da daha da kötüsü, siteyi kullanmayı bırakıyorlar.
ya23

14
"Bir kadının balık gibi bir erkeğe ihtiyacı var mı?" Peki bu sorunun cevabı nedir?
Lotus Notes

2
bisiklet. Irina Dunn tarafından alıntı (Gloria Steinem tarafından popülerleştirilmiştir).
webbiedave

9
... balığın bayan balığa ihtiyacı gibi.
matt lohkamp

28

Bunu bir kez bir arkadaşının sitesinde gördüm. 20 dolar satıyor. Bu ASCII sanatı!

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'   

2
+1, ancak böyle bir şey için ödeme yapmanız gerektiğini düşünmüyorum. Sıfırdan inşa etmeyi tercih ederim.
Dalin Seivewright

5
güzel, ama kör insanlar için de sözlü sürüm gerekir
pro

29
Buradaki sorun, çatlamak bir görüntüden daha kolay olmasıdır. Tek yapmanız gereken onu bir resme okumak ve OCR yapmak için mükemmel bir siyah beyaz görüntünüz var.
Andrei Krotkov

@Andrei, bunun için "figlet" kullanılarak oluşturulan alternatif bir versiyon var, bu karakterleri birbirine kaplayabilir, böylece captcha karakterleri ASCII karakterlerini paylaşır. Bunlar OCR için biraz daha zordur.
Pasi Savolainen

58
Reklam olabilir ama a) bu soruya geçerli bir cevaptır ve b) yazar açıkça bunun bir arkadaşın olduğunu belirtir (yani açıkça önyargılı olduğunu belirtir), bu yüzden cevapla ilgili herhangi bir sorun görmüyorum .
Michael Stum

28

CAPTCHA, mevcut kavramsallaştırmasında kırılmış ve çoğu zaman kolayca atlanabilir. Mevcut çözümlerden HİÇBİRİ etkin bir şekilde çalışmaz - GMail en iyi ihtimalle zamanın yalnızca% 20'sini başarır.

Aslında bundan çok daha kötü, çünkü bu istatistik sadece OCR kullanıyor ve çevresinde başka yollar da var - örneğin, CAPTCHA proxy'leri ve CAPTCHA çiftlikleri. Son zamanlarda OWASP'ta konu hakkında bir konuşma yaptım, ancak ppt henüz çevrimiçi değil ...

CAPTCHA hiçbir şekilde gerçek koruma sağlayamasa da, istediğiniz her şey düzenli araba ile çöpleri engellemekse ihtiyaçlarınız için yeterli olabilir. Ancak yarı profesyonel spam göndericileri bile durdurmaz.

Genellikle, korunması gereken herhangi bir değere sahip kaynakları olan bir site için, 3 uçlu bir yaklaşıma ihtiyacınız vardır:

  • Yalnızca kimliği doğrulanmış kullanıcılardan gelen gaz kelebeği yanıtları, anonim gönderilere izin verme.
  • Kimliği doğrulanmış kullanıcılardan gelen birkaç çöp kutusunu en aza indirin (engellemeyin) - örneğin, itibar tabanlı. Bir insan moderatörü de burada yardımcı olabilir, ancak o zaman başka problemleriniz var - yani moderatörü su basmak (hatta boğmak) ve bazı siteler açıklığı tercih ediyor ...
  • Spam benzeri davranışları veya daha iyi insan benzeri olmayan davranışları tanımlamak için sunucu tarafı sezgisel mantık kullanın.

CAPTCHA ikinci çatal ile bir TINY bitine yardımcı olabilir, çünkü ekonomiyi değiştirir - diğer çatallar yerinde ise, artık CAPTCHA'yı (minimum maliyet, ancak yine de bir maliyet) kırmayı zahmete sokmaya değmez. az miktarda spam.

Yine, tüm spam'leriniz (ve diğer çöpleriniz) bilgisayar tarafından üretilmeyecektir - CAPTCHA proxy veya çiftlik kullanarak kötü adamların sizi spam yapmasına neden olabilir.


CAPTCHA proxy'si, resminizi porno, oyun vb. Diğer sitelerin kullanıcılarına sundukları zamandır.

Bir CAPTCHA çiftliği, onları çözen birçok ucuz işçiye (Hindistan, uzak doğu, vb.) Sahiptir ... Çözülen 1000 captcha başına genellikle 2-4 $ arasındadır. Geçenlerde Ebay bunun için bir yayın gördüm ...


Vekiller ve çiftlikler insanlar tarafından çözüldüğü için onu kırmaz ya da 'CAPTCHA'yı aşmaz. Aslında bunların varlığı, mevcut yöntemlerin işe yaradığı gerçeğinin kanıtıdır! CAPTCHA 'İstediğim teslim türü' sadece 'demek değildir' Bu bir insan gönderimi mi? '
Fraser

10
Kesinlikle! Ancak CAPTCHA'lar çoğunlukla "botları" önlemek için kullanılır - ve bu botların insan olup olmadığı önemli değildir, amaç kitlesel, kişisel olmayan kullanımı önlemektir. Bu her zaman söylediğim şeyi kanıtlıyor, CAPTCHA yanlış sorunu çözüyor (ve çok kötü bir şekilde yapıyor) ...
AviD

Captcha'nın iyi olduğu birçok durum var. Mesele şu ki, web sitesi sahipleri kullanıcı deneyimini kontrol ile dengeleyen bir çözüm seçmelidir. Bazıları için captcha yok. Diğerleri için captcha. Hala diğerleri için, başka bir şey. Ancak captcha'yı tamamen reddetmek akıllıca değil.
pbreitenbach

1
Sorun CAPTCHA'yı devreye sokmanın size bu kontrolü vereceğini düşünmekten kaynaklanıyor. Öyle değil. Önemli bir parça değil. Bazı değer sağlayabilir, ancak "kontrol" DEĞİL bazı nadir durumlar vardır. (Buradaki CAPTCHA'dan sık sık bahsetmiştim, diğer mekanizmalarla birlikte, spam göndermenin değerli olmamasına yardımcı olmak için ekstra biraz şey verir.)
AviD

27

Bu nedenle, moderatörler dışındaki tüm kullanıcılar için CAPTCHA zorunludur. [1]

Bu inanılmaz derecede aptalca. Peki sitede herhangi bir yayını düzenleyebilecek ancak CAPTCHA olmadan yayın yapamayan kullanıcılar olacak mı? Mesajları düşürmek için yeterli temsilciniz varsa, CAPTCHA olmadan gönderim yapmak için yeterli temsilciniz vardır. Gerekirse daha yüksek yapın. Ayrıca, görüntü tanıma olmadan kullanabileceğiniz çok sayıda spam algılama yöntemi vardır, böylece kayıt dışı kullanıcılar için bile bu tanrının terk ettiği CAPTCHA formlarını doldurmak asla gerekli olmayacaktır.



20

Buradaki herkesin insan olup olmadığını, yani bir güven ağı gibi bir şeyi tekrar kontrol etmek için topluluğun kendisini kullanmaya ne dersiniz? Web'i başlatmak için gerçekten güvenilir bir kişi bulmak için, kesinlikle ve% 100 insan olduğundan emin olmak için bu CAPTCHA'yı kullanmanızı öneririm.

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

Elbette, güven ağını oluşturmamıza yardımcı olmak için Fields Madalya konuşmasını hazırlamakla çok meşgul olması için küçük bir şans var ...


17

Asirra şimdiye kadarki en sevimli captcha.


İlk başta "Asirra şimdiye kadarki en çok benimsenen captcha" olarak okudum. ki bu beni hafifçe fırlattı. Muhtemelen en sevimli olduğunu kabul ediyorum, ancak sitede belirttiği gibi, bir bot yazarı tüm görüntüleri kurtarabilir (bir süre alabilir), onları sınıflandırır ve bot kolayca kırırdı.
Dalin Seivewright

7
Kör bir kişi bunlara nasıl cevap verebilir?
BBEtances

reCAPTCHA ile neredeyse aynı. daha az rahatsız edici ve imaj temelli olmayan bir yaklaşım arıyoruz.
AhmetB - Google

Demolarını kontrol etmek için çok sayıda resim kullandıklarını söylemeliyim.
pimvdb

1
Bir insan olduğumu kabul etmeden önce 3 kez gitmiştim - muhtemelen bazı görüntüler sadece büyük kürk topları gibi görünüyordu.
Kramii

16

Sadece kullanıcının basit aritmetik ifadeleri çözmesini sağlayın:

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

vb.

Spam gönderenler yakalandıktan sonra, bunları tespit etmek oldukça kolay olmalıdır. Algılanan bir spam gönderici istekte bulunduğunda, aşağıdaki iki komut arasında geçiş yapın:

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

Açıkçası, bunun işe yaramasının nedeni, tüm spam göndericilerin captcha'yı evalbir kod satırında çözmek için kullanmak için yeterince akıllı olmasıdır .


1
Ayrıca zulüm için +1, ama sadece bunun benimle işe yaramayacağını eklemek istedim, VB.NET eval sağlayıcısını kullanıyorum ve c: veya rm -rf, yeni satırlar, iki nokta üst üste, noktalı virgül vb. Biçimini kontrol ediyorum. ondan biraz daha yaratıcı olmak. Ayrıca, Linux betiklerinin root olarak çalışmasına asla izin vermem, bu yüzden de işe yaramaz.
Stefan Steiger

@ Longpoke Sadece işe yaramaz. Modern Unix'lerin çoğunda rmkoşmaya karşı koruma vardır -rf /.
hamstergene

lol sadece beni denemek için söylüyordum komik olurdu. Belki bunun yerine rm -rf / * işe yarar. Her neyse, yapabileceğiniz başka kötü şeyler var.
11:13, L

Bu aynı zamanda insanların Python'ları literal_eval(veya diğer dillerdeki eşdeğerlerini) bilmediğini varsayar ki bu oldukça üzücü bir gerçektir.
Petr Viktorin

rm -rf ~script birinin kişisel makinesinde çalışıyorsa yıkıcı olurdu
kirb

16

Aşağıdaki basit tekniği kullanıyorum, kusursuz değil. Birisi bunu gerçekten atlamak istiyorsa, kaynağa bakmak kolaydır (yani Google CAPTCHA için uygun değildir), ancak çoğu botu kandırmalıdır.

Bunun gibi 2 veya daha fazla form alanı ekleyin:

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

Ardından gizlemek için CSS kullanın:

.hideme {
    display: none;
}

Gönderildiğinde, bu form alanlarının içinde herhangi bir veri olup olmadığını, form gönderisinde başarısız olup olmadıklarını kontrol edin. Akıl yürütme, botların HTML'yi okuyacağı ve her form alanını doldurmaya çalışacağı, oysa insanlar girdi alanlarını görmeyecek ve yalnız bırakmayacaklarıdır.

Bunu daha az sömürülebilir hale getirmek için yapabileceğiniz çok daha fazla şey var, ancak bu sadece temel bir kavram.


7
"bal küpü captcha"
mpen

15

Hepimizin rağmen gerektiğini temel matematik bilmek, matematik bulmaca bazı karışıklıklara neden olabilir. Örneğinizde bazı insanların "1" yerine "8" ile yanıt vereceğinden eminim.

Kalın veya italik olarak vurgulanmış rastgele karakterler içeren basit bir metin dizesi uygun olur mu? Kullanıcının yalnızca CAPTCHA olarak kalın / italik harfleri girmesi gerekir.

Örneğin, s sdfa t werwe bir jh C üzücü k oghvefdhrffghlfgdhowfgh

Bu durumda "yığın" CAPTCHA olur. Bu fikir üzerinde çok sayıda varyasyon olduğu açıktır.

Düzenleme: Bu fikirle tanımlanan olası sorunlardan bazılarını ele almak için örnek varyasyonlar:

  • kalın / italik yerine rastgele renkli harfler kullanarak.
  • CAPTCHA için her ikinci kırmızı harfi kullanma (botların CAPTCHA'yı tahmin etmek için farklı biçimlendirilmiş harfleri tanımlama olasılığını azaltır)

1
Bunu beğendim - örneğin "lütfen üçüncü altı çizili kırmızı harf, dördüncü kalın yeşil harf ve beşinci kalın olmayan mavi harfle yazılan kelimeyi girin".
An̲̳̳drew

9
'Ssdfatwerweajhcsadkoghvefdhrffghlfgdhowfgh' üstündeki bu örnek basit bir ifade ile çözülebilir
alex

Bu, acalcula'lı kullanıcılar için iyi olmaz. Bu rahatsızlığa sahip bilim adamları vardır, bu yüzden programcıların olması mantıksız değildir.
BobbyShaftoe

Mükemmel fikir! Belki de ön plan / arka plan renklerini değiştirerek oynayarak, metni insanlar tarafından kolayca görülebilen, ancak botlar için çok rasgele gösteren bir şey elde edebilirsiniz? Tabii ki bu renk körü insanlar için daha zor :-(
Shalom Craimer

2
Renk kullanmak işleri karmaşıklaştırabilir, çünkü farklı renk körlüğü biçimlerini desteklemeniz gerekir. Aksi takdirde bu kulağa hoş geliyor.
KarstenF

12

Bu benzer tartışma başlatılmış olmasına rağmen :

Bu çözümü sık veri madenciliği uygulamalarımızdan birinde deniyoruz:

Daha İyi Bir CAPTCHA Kontrolü (Bak Ma - GÖRÜNTÜ YOK!)

Bizim eylem görebiliyorum Yapı İncelemeleri Ara .

Kaynağı görüntüleyebilir ve CAPTCHA'nın yalnızca HTML olduğunu görebilirsiniz.


Bu ŞİMDİ için işe yarayacaktır, ancak yeterli sayıda site böyle bir yaklaşım kullandığında, spam gönderenler html'yi bir resme dönüştürür ve sonucu OCR yapar.
çözgü

12

Kimsenin bunu okumadığını biliyorum, ama ya köpek ya da kedi CAPTCHA?

Hangisinin kedi veya köpek olduğunu söylemelisiniz, makineler bunu yapamaz .. http://research.microsoft.com/asirra/

Havalı mı ..


4
Bilgisayarlar bunu yapamaz. İnsanları kör edemez.
TRiG

1
Ben de, yüksek çözünürlüklü bir monitörde bakarken. Bu görüntüler TINY. Ayrıca, bunlardan biri beyaz bir çitin arkasında tanımlanamayan bir canlıydı.
jsims281

10

Sadece herkesin cevaplayabileceği basit sorular kullanıyorum:

Gökyüzü ne renktir?
Bir portakalın rengi nedir?
Çimen ne renk?

Birisinin sitenize bir botu özel olarak programlaması gerekir, bu da çabaya değmez. Eğer yaparlarsa, soruları değiştirirsiniz.


Cyc bunu önemsiz bir şekilde çözebilir ... ve açık kaynak. Uygulamak için en az birkaç saat komut dosyası gerektirir.
rmeador

bu ubuntu forumu tarafından da kullanılır. hoşuma gitti ve "2 + 2 =?" gibi kontrol uygulamaları veya "alfabenin ilk harfi nedir" çok basittir.
pistacchio

8
Cevaplar: 1) Şimdi, açık mavi, daha sonra kırmızı, sonra şehir merkezine yakın turuncu ipuçlarıyla siyah. 2) turuncu, küflü olmadığı sürece, yeşil veya siyah veya beyazdır. 3) kahverengi, Güney Kaliforniya'da, Beverly Hills'de değilseniz, o zaman yeşil.
mmr

52
@mmr Bakın, bu aslında sistemin bir yararı,
zekâların

2
İkinci ve üçüncü cevaplar çöllerde veya Baltimore'da yaşayan insanlara karşı önyargılıdır.
Mike Robinson

10

Şahsen CAPTCHA'yı sevmiyorum, kullanılabilirliğe zarar veriyor ve geçerli kullanıcıları geçersiz kılma güvenlik sorununu çözmüyorum.

Sunucu tarafı yapabileceğiniz bot algılama yöntemlerini tercih ederim. Geçerli kullanıcılara sahip olduğunuzdan (OpenID sayesinde) "davranış" yapmayanları engelleyebilirsiniz, sadece bir botun desenlerini tanımlamanız ve tipik bir kullanıcının desenleriyle eşleştirmeniz ve farkı hesaplamanız gerekir.

Davies, N., Mehdi, Q., Gough, N.: Oyun Motorları ve AI Araçlarını Kullanarak Akıllı Bir NPC Oluşturma ve Görüntüleme http://www.comp.glam.ac.uk/ASMTA2005/Proc/pdf/game-06 .pdf

Golle, P., Ducheneaut, N.: Botların Online Oyunlar Oynamasını Önleme <- ACM Portalı

Ducheneaut, N., Moore, R.: Oyunun Toplumsal Yönü: Devasa Çok Oyunculu Çevrimiçi Oyunlarda Etkileşim Desenleri Üzerine Bir Çalışma

Bu referansların çoğu video oyunu bot algılamasına işaret ediyor, ancak bunun nedeni grubumuzun Robot Savaşları: Robot Tanımlamasının Oyun İçi Keşfi başlıklı makalesinin konusuydu . Yayınlanmadı ya da hiçbir şey, sadece bir okul projesi için bir şey. İlgileniyorsanız e-posta gönderebilirim. Gerçek şu ki, video oyunu bot algılamasına dayansa bile, web'de genelleştirebilirsiniz, çünkü kullanım kalıplarına bağlı bir kullanıcı vardır.

MusiGenesis'in bu yaklaşımın yöntemine katılıyorum çünkü web sitemde kullandığım şey ve iyi çalışıyor. Görünmez CAPTCHA işlemi, çoğu komut dosyasını engellemenin iyi bir yoludur, ancak yine de bir komut dosyası yazarının yönteminizi tersine mühendislik yapmasını ve javascriptte aradığınız değerleri "taklit etmesini" engellemez.

En iyi yöntemin 1) kötü olduklarında bloke edebilmeniz için bir kullanıcı kurmak olduğunu söyleyeceğim, 2) web sitesi kullanımının tipik kalıplarına karşı tipik kalıpları algılayan bir algoritma tanımlamak ve 3) bu kullanıcıyı buna göre engellemek.


Bir bot neden OpenID'leri kaydedemiyor? Bir saldırganın kendi OpenID yayıncısını oluşturması yeterlidir.
rjmunro

Evet @rjmunro, ve bu iyi bir şey. İnternetin zorluğu anonim kullanıcıların tanımlanmasıdır. Bir bot bir OpenID kaydederse ve bu OpenID kullanıcısını bir bot olarak tanımlarsanız, onu kapatabilirsiniz. Artık anonim değil. Bu, aynı sağlayıcı tarafından birden fazla kaydı engellemez, ancak daha sonra botlara izin vermek için bu sağlayıcıyı kapatabilirsiniz. Amaç, internetin gizliliğini olabildiğince kaldırmaktır.
jwendl

10

Sizinle paylaşmak istediğim bazı fikirlerim var ...

OCR'den kaçınmak için ilk fikir

Kullanıcının bazı gizli kısımları olan bir captcha, ancak tam görüntü birlikte iki koddur, bu nedenle OCR programları ve captcha çiftlikleri görünür ve gizli kısmı içeren görüntüyü okur, her ikisini de çözmeye çalışır ve gönderemez. .. - Ben bunu hazır ve çevrimiçi çalışıyorum hazır var.

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

Daha kolay hale getirmek için İkinci Fikir

İnsanın doğru olanı seçmesi gereken birçok kelimeyi içeren bir sayfa. Bunu da yarattım, basit. Kelimeler kopyalanabilir resimlerdir ve kullanıcının sağdaki kelimeyi tıklaması gerekir.

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

Dışarı görüntüleri ile Üçüncü Fikir

Önceki ile aynı, ancak div ve metinler veya küçük simgelerle. Kullanıcı, ne olursa olsun, yalnızca bir div / letter / görseli düzeltmek zorundadır.

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

Son Fikir - Ben buna CicleCaptcha diyorum

Ve bir tane daha CicleCaptcha'm , kullanıcı bir görüntü üzerinde bir nokta bulmalı. Eğer onu bulup tıklarsa, o zaman bir kişi, makineler muhtemelen başarısız olur veya bununla bir yol bulmak için yeni yazılımlar yapması gerekir.

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

Herhangi bir eleştirmen bekliyoruz.


Re-captcha, sözleri için konuşacak metne sahiptir. Nereye tıklayacağınızı söyleyebilir.
Robert P

@RobertP Görme engelli olduğunuzda tıklamak, görme engelli olduğunuzda çekim yapmaya benzer ... "Sadece kafa hedefleyin".

8
@pst "Biraz sola. Bu doğru, biraz daha. Güzel. İyi. Şimdi. Şimdi. Yukarı. Hayır, diğer taraftan. Evet, anladın. Sadece biraz daha. Evet. Sadece biraz daha fazla. Neredeyse orada. Neredeyse orada ... neredeyse ... neredeyse ... CAPTCHA !!! "
Robert P


7

Son zamanlarda, adı ve kimliği "message" olarak ayarlanmış bir etiket eklemeye başladım. CSS ile gizli olarak ayarladım (display: none). Spam botları görür, doldurur ve formu gönderir. Sunucu tarafı, kimlik adı olan metin alanı doldurulursa yayını spam olarak işaretlerim.

Başka bir teknik üzerinde rastgele bazı adlar ve kimlikleri oluşturmak, bazı spam denetimleri ve diğerleri normal alanlar olmak üzerinde çalışıyorum.

Bu benim için çok iyi çalışıyor ve henüz herhangi bir başarılı spam almadım. Ancak, sitelerime çok daha az ziyaretçi alıyorum :)


Form alanını gizlemek için css kullanmak ve boş olduğunu iddia etmek de benim için çalıştı. Aptal değil ama iyi bir seçenektir.
Chris

Teknik 1: Bal küpü
kevinji

6

Çok basit aritmetik iyidir. Kör insanlar cevap verebilir. (Ama Jarod'un dediği gibi, operatör önceliğine dikkat edin.) Birisinin ayrıştırıcı yazabileceğini düşünüyorum, ancak spam göndermeyi daha maliyetli hale getiriyor.

Yeterince basit ve etrafına kod yazmak zor olmayacak. Burada iki tehdit görüyorum:

  1. rastgele spambotlar ve onları yedekleyebilecek insan spambotları; ve
  2. botları oyun için oluşturulan Yığın taşması

Basit aritmetik ile # 1 tehdidini yenebilirsin, ancak # 2 tehdidini yenemezsin.


Bir ayrıştırıcı, sanırım, bir görüntü-captcha krakeri yazmaktan çok daha kolay. Unutmayın, kullanıcılara sunduğunuz en kolay şey bir spambotun muhtemelen kullanacağı şeydir. Ne yazık ki, JS olmayan captcha'nın daha zor olması gerekiyor.
stalepretzel

5

Ya sahip olduğunuz captcha fikirlerinin bir kombinasyonunu kullandıysanız (bunlardan herhangi birini seçin - ya da rastgele birini seçin):

  • ASCII metin güvenlik kodu: // (_) //
  • matematik bulmaca: 7 eksi 3 çarpı 2 nedir?
  • trivia sorular: daha iyi olanı, bir kurbağa veya bir buzlu şeker?

sayfanın css gizli bölümüne tam olarak aynı captcha yerleştirerek - bal küpü fikri. Bu şekilde, doğru cevabı beklediğiniz bir yeriniz ve cevabın değişmemesi gereken başka bir yeriniz olur.


1
Bence "daha iyi olanı" oldukça özneldir. Lezzet konusunda uzuvlara çıkan insanlar bot olarak yorumlanacak. Ayrıca, sadece iki cevapla bot olarak geçme şansı% 50'dir.
pimvdb

Sübjektif kısımda doğrudur, ancak özellikle orijinal sorudan kaynaklanmıştır. Demek istediğim, üç (veya çoklu) tipin tümünü rastgele kullanmaktı. Ayrıca, cevap çoktan seçmeli ise geçme şansı sadece% 50'dir. Kullanıcının kelimeyi bir listede olası cevapları belirtmeden yazması durumunda, bir botun soru / cevapta doğru kelimeleri seçmesi çok daha zor hale gelir.
TheEmirOfGroofunkistan

5

Basit bir "Bu alanı boş bırak:" alanı ile inanılmaz derecede iyi sonuçlar aldım. Botlar her şeyi dolduruyor gibi görünüyor, özellikle de alana "URL" gibi bir ad verirseniz. Sıkı yönlendiren kontrol ile birlikte, henüz bir bot almak yoktu.

Lütfen buraya erişilebilirliği unutma. Captcha'lar, ekran okuyucu kullanan birçok kişi için herkes tarafından kullanılamaz. Basit matematik problemleri veya çok önemsiz bilgiler ("gökyüzü ne renk" sorusunu sevdim) görme engelli kullanıcılar için çok daha dost canlısıdır.


5

Basit metin harika geliyor. Bu işi yapmak için topluluğa rüşvet verin! Benim yaptığım gibi, SO destek noktalarının bir kullanıcının sitenin başarılı olmasına yardımcı olma taahhüdünü ölçtüğüne inanıyorsanız, siteyi spam göndericilerinden korumaya yardımcı olacak itibar puanları sunmak tamamen mantıklıdır.

Basit bir sorunun her bir katkısı ve bir dizi doğru cevap için +10 itibar sunun. Soru, mevcut tüm sorulardan uygun bir şekilde uzak olmalı (mesafeyi düzenle) ve insanlar cevaplayamazsa itibar (ve soru) yavaş yavaş ortadan kalkmalıdır. Diyelim ki doğru cevaplardaki başarısızlık oranı% 20'den fazla ise, gönderen yanlış cevap başına en fazla 15'e kadar bir itibar puanı kaybeder. Yani kötü bir soru gönderirseniz, şimdi +10 alırsınız ancak sonunda net -5. Ya da belki bir kullanıcı örneğinden captcha sorununun iyi olup olmadığı konusunda oy vermesini istemek mantıklıdır.

Son olarak, günlük destek kapağı gibi, hiçbir kullanıcının captcha soruları göndererek 100'den fazla itibar kazanamayacağını varsayalım. Bu, bu tür katkılara verilen ağırlık üzerinde makul bir kısıtlamadır ve spam göndericilerinin sisteme soru sormasını önlemeye de yardımcı olabilir. Örneğin, eşit olasılıkla değil, gönderenin itibarı ile orantılı bir olasılık içeren sorular seçebilirsiniz. Jon Skeet, lütfen soru sormayın :-)


5

Sunucuya bir şifreleme nonce için AJAX sorgusu yapın. Sunucu, nonce içeren bir JSON yanıtı geri gönderir ve ayrıca nonce değerini içeren bir çerez ayarlar. JavaScript'te nonce'nin SHA1 karmasını hesaplayın, değeri gizli bir alana kopyalayın. Kullanıcı formu POST ettiğinde, şimdi çerezi nonce değeriyle geri gönderir. Çerezin nonce'sinin SHA1 karmasını hesaplayın, gizli alandaki değerle karşılaştırın ve bu nonce'yi son 15 dakika içinde oluşturduğunuzu doğrulayın (memcached bunun için iyidir). Tüm bu kontroller başarılı olursa yorumu gönderin.

Bu teknik, spam göndericinin oturmasını ve neler olduğunu anlamasını gerektirir ve bir kez yaptıklarında, birden fazla istekte bulunmaları ve yorum almak için çerez durumlarını korumaları gerekir. Ayrıca Set-Cookieüstbilgiyi yalnızca JavaScript'i ayrıştırıp yürüttüklerinde ve AJAX isteğinde bulunduklarında görürler. Bu, özellikle yalnızca tek bir site için geçerli olduğundan, spam gönderenlerin çoğunun istekli olduğundan çok daha fazla iş. En büyük dezavantajı, JavaScript kapalı veya çerezleri devre dışı bırakılan herkesin potansiyel spam olarak işaretlenmesidir. Bu, denetleme kuyruklarının hala iyi bir fikir olduğu anlamına gelir.

Teorik olarak, bu, belirsizlik yoluyla güvenlik olarak nitelendirilebilir, ancak pratikte mükemmeldir.

Bir keresinde bir spam göndericinin bu tekniği kırma çabası içinde olduğunu hiç görmedim, ancak belki birkaç ayda bir elle konuya giren bir spam girişi alıyorum ve bu biraz ürkütücü.


5

1) İnsan çözücüler

Burada bahsedilen tüm çözümler insan çözücüler yaklaşımı ile engellenmektedir. Profesyonel bir spambot yüzlerce bağlantıyı tutar ve CAPTCHA'nın kendisini çözemediğinde, ekran görüntüsünü uzak insan çözücülerine geçirir.

CAPTCHA'ların insan çözücülerinin yasaları çiğnediğini sık sık okudum. Bu, bu (spam) endüstrisinin nasıl çalıştığını bilmeyenler tarafından yazılmıştır.
İnsan çözücüler CAPTCHA'ların çözdüğü sitelerle doğrudan etkileşime girmezler. CAPTCHA'ların hangi sitelerden alındığını ve gönderildiklerini bile bilmiyorlar. İnsan çözücü hizmetleri sunan düzinelerce (yüzlerce olmasa da) şirket ve / veya web sitesinin farkındayım, ancak kurulların kırılmasıyla doğrudan etkileşim için tek bir şirket değil.
İkincisi herhangi bir yasayı ihlal etmez, bu nedenle CAPTCHA çözme tamamen yasal (ve resmi olarak kayıtlı) ticari şirketlerdir. Cezai niyetleri yoktur ve örneğin uzaktan test, araştırmalar, konsept provaları, prototipler vb. İçin kullanılabilirler.

2) Bağlam Tabanlı Spam

AI (Yapay Zeka) botları, bağlamları belirler ve farklı IP adreslerinden (farklı ülkelerin) farklı zamanlarda içeriğe duyarlı diyalogları sürdürür. Blog yazarları bile, yorumların botlardan geldiğini anlayamıyorlar. Birçok ayrıntıya girmeyeceğim, ancak, botlar insan diyaloglarını web taraması yapabilir, veritabanında saklayabilir ve daha sonra bunları tekrar kullanabilir (cümle ile ifade edilir), böylece yazılım veya insanlar tarafından spam olarak algılanamazlar.

En çok oy verilen cevap :

  • * "Teori şu:
    • Spam botu JavaScript'i desteklemez ve gördüklerini gönderir
    • Bot JavaScript'i destekliyorsa formu anında gönderir
    • Yorum yapan kişi "* göndermeden önce sayfanın en azından bir kısmını okudu" *

yanı sıra bal küpü cevap ve bu konudaki cevapların çoğu sadece yanlıştır.
Maalesef kurbanlara mahkum yaklaşımlar

Çoğu spambot, farklı IP'lerden (farklı ülkelerin) yerel ve uzak javascript uyumlu (yamalı ve yönetilen) tarayıcılar aracılığıyla çalışır ve bal tuzaklarını ve bal kaplarını atlatmak için oldukça zekidir.

Farklı sorun, blog sahiplerinin bile yorumların gerçekten insan diyaloglarından ve diğer web panolarından (forumlar, blog yorumları vb.

3) Kavramsal Olarak Yeni Yaklaşım

Üzgünüm, bu kısmı çökelmiş olarak çıkardım


1
Sorunu bu konudaki hemen hemen her cevapla özetlediniz. Eğer küçük web sitesine özel olmasaydı hepsi hızlı bir şekilde yenilecekti. Bunlardan herhangi biri büyük bir web sitesinde veya bir dizi küçük web sitesinde (Wordpress eklentisi olarak adlandırılır) kullanıldıysa, bir günde yenilebilirler. Gerçekten CAPTCHAS değiller, ama belirsizliği nedeniyle şanslı güvenlik vakaları. Ayrıca haklısın; modern spam, benim bile spam olarak tanıyamayacağım yorumlar getiriyor. CAPTCHA'dan vazgeçtim ve bunun yerine Mollom'u kullandım. Kalabalık kaynağı spam'ı daha iyi bir yaklaşımdır.
Dan

5

Aslında programlama ile ilgili bir captcha setinin olması bir fikir olabilir. Örneğin:

Captcha

Birinin bunu atlamak için bir sözdizimi denetleyicisi oluşturma olasılığı vardır, ancak bir captcha'yı atlamak çok daha fazla iştir. Bununla ilgili bir captcha sahibi olma fikrini elde edersiniz.


5
Hariç: Şuna örnek sorusunun cevabı biliyorum (daha sonra bu genelinde durumda birileri tökezlemeleri ve görüntü yoktur: "Kaç PHP sözdizimi hataları içinde $var == array(1 = 'one');;") 'dir 1, değil 3? (Cidden. Deneyin $var == array(1 => 'one');;) ^ _ ~
pinkgothic

Heh, bu görüntüyü yaptığımı hatırlamama yetecek kadar uzun zaman oldu. Tabii ki haklısınız ve bunun bir captcha olarak çok iyi olacağını düşünmüyorum - ama belki de bir programlama forumu için giriş şartı olarak.
Ross

4

Spambotlarla mücadele konusunda hiçbir deneyimim olmadığını ve ne kadar sofistike olduklarını gerçekten bilmediğimi itiraf etmeliyim. Yani, jQuery makalesinde tamamen sunucuda gerçekleştirilemeyen bir şey görmedim dedi.

JQuery makalesinden özeti yeniden ifade etmek için:

  1. İletişim formunu sunucuda oluştururken ...
  2. Geçerli saati alın.
  3. Bu zaman damgasını ve gizli bir kelimeyi birleştirin ve 32 karakterlik bir karma oluşturun ve ziyaretçinin tarayıcısında bir çerez olarak saklayın.
  4. Karma veya 'simge' zaman damgasını gizli form etiketinde saklayın.
  5. Form geri gönderildiğinde, zaman damgasının değeri, çerezde depolanan 32 karakterli 'jeton' ile karşılaştırılır.
  6. Bilgiler eşleşmiyorsa veya eksikse veya zaman damgası çok eskiyse, isteğin yürütülmesini durdurun ...

Başka bir seçenek, geleneksel görüntü CAPTCHA'yı her istekte oluşturma yükü olmadan kullanmak istiyorsanız, bunları çevrimdışı olarak önceden oluşturmaktır. Sonra her formla görüntülemek için rastgele birini seçmeniz yeterlidir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.