Praktyczne podejścia CAPTCHA nieoparte na obrazach?


318

Wygląda na to, że dodamy obsługę CAPTCHA do przepełnienia stosu. Jest to konieczne, aby zapobiec botom, spamerom i innym złośliwym działaniom skryptowym. Chcemy tylko, aby ludzie tutaj publikowali lub edytowali rzeczy!

Będziemy używać CAPTCHA JavaScript (jQuery) jako pierwszej linii obrony:

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

Zaletą tego podejścia jest to, że dla większości ludzi CAPTCHA nigdy nie będzie widoczny!

Jednak w przypadku osób z wyłączoną obsługą JavaScript nadal potrzebujemy rozwiązania awaryjnego i tutaj jest to trudne.

Napisałem tradycyjny formant CAPTCHA dla ASP.NET, którego możemy ponownie użyć.

CaptchaImage

Jednak wolę iść z czymś tekstowym, aby uniknąć narzutu tworzenia wszystkich tych obrazów na serwerze przy każdym żądaniu.

Widziałem takie rzeczy jak ...

  • Captcha tekstu ASCII: \/\/(_)\/\/
  • zagadki matematyczne: co to jest 7 minus 3 razy 2?
  • ciekawostki: co smakuje lepiej, ropucha czy popsicle?

Może po prostu przechylam się tutaj w kierunku wiatraków, ale w <noscript>miarę możliwości chciałbym mieć mniej wymagającą zasobów, zgodną z obrazami CAPTCHA.

Pomysły?


16
Nie ma potrzeby tworzenia obrazu na serwerze. Musisz tylko obsłużyć żądanie. Na przykład <img src = "generateImage.aspx? Guid = blah">
Brian R. Bondy

58
Ciekawostki są podatne na uprzedzenia kulturowe (pomyśl o Francuzie odpowiadającym na twoje pytanie ...). Ponadto mogą poradzić sobie z użytkownikami, których angielski nie jest językiem ojczystym. Można je również łatwo rozbić za pomocą brutalnej siły (masz tylko ~ 2 ^ # _ OfQuestions).
Adam Matan

72
Co to, do licha, jest popsicle?
Fraser

57
Według Wolfram Alpha, „co to jest 7 minus 3 razy 2” to 1. Myślałem, że to 8. Myślę, że właśnie wymyśliłeś anti-captcha.
Mike Robinson

50
@Mike Robinson: Myślę, że programiści powinni wiedzieć o pierwszeństwie operatorów w codziennym użyciu NORMALNYM =)
Gnark

Odpowiedzi:


205

Metodą, którą opracowałem i która wydaje się działać idealnie (chociaż prawdopodobnie nie otrzymuję tylu komentarzy spamowych jak Ty), jest posiadanie ukrytego pola i wypełnienie go fałszywą wartością, np .:

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

Następnie mam fragment JavaScript, który aktualizuje wartość co sekundę o liczbę sekund, przez które strona została załadowana:

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

Następnie po przesłaniu formularza, jeśli wartość antyspamowa to nadal „lalalala”, oznaczam go jako spam. Jeśli wartość antyspamu jest liczbą całkowitą, sprawdzam, czy jest ona wyższa niż 10 (sekund). Jeśli jest poniżej 10, oznaczam go jako spam, jeśli jest to 10 lub więcej, przepuszczam go.

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

Teoria jest taka:

  • Bot spamowy nie obsługuje JavaScript i przesyła to, co widzi
  • Jeśli bot obsługuje JavaScript, natychmiast prześle formularz
  • Komentator przynajmniej przeczytał część strony przed opublikowaniem

Wadą tej metody jest to, że wymaga ona obsługi JavaScript, a jeśli nie masz włączonej obsługi JavaScript, Twój komentarz zostanie oznaczony jako spam, jednak sprawdzam komentarze oznaczone jako spam, więc nie stanowi to problemu.

Odpowiedź na komentarze

@MrAnalogy: Podejście po stronie serwera wydaje się całkiem dobrym pomysłem i jest dokładnie takie samo, jak w JavaScript. Dobra decyzja.

@AviD: Zdaję sobie sprawę, że ta metoda jest podatna na bezpośrednie ataki, jak wspomniałem na moim blogu . Będzie jednak bronił się przed przeciętnym botem spamującym, który ślepo wysyła śmieci do dowolnej formy, jaką może znaleźć.


45
WERSJA, KTÓRA DZIAŁA BEZ JAVASCRIPT Co powiesz na to, czy zrobiłeś to z ASP, itp. I miałeś znacznik czasu, kiedy strona formularza została załadowana, a następnie porównałeś ją z czasem przesłania formularza. Jeśli ElapsedTime <10 sekund, prawdopodobnie jest to spam.
Clay Nichols

28
Bardzo oczywiste, że można to obejść, jeśli złośliwy użytkownik stara się na to spojrzeć. Chociaż jestem pewien, że zdajesz sobie z tego sprawę, myślę, że zakładasz, że nie będą się tym przejmować ... Cóż, jeśli nie jest to witryna o żadnej wartości, masz rację i nie będą się tym przejmować - ale jeśli tak się stanie, a
obejdzie

48
Oto zwrot, którego używam. Ustaw ukrytą wartość na czas zaszyfrowany ustawiony na teraz. Po odesłaniu wiadomości sprawdź, czy upłynęło od 10 sekund do 10 minut. Powoduje to oszustów, którzy próbują podłączyć pewną zawsze prawidłową wartość.
Tim Scott

7
Wszystkim, którzy wskazali, że boty mogą się przedostać ... Wiem to, jak wskazałem w odpowiedzi. To bardzo prosta metoda na powstrzymanie przeciętnego bota i znudzonych użytkowników. Obecnie używam go na swoim blogu i jak dotąd udało mu się w 100% odnieść sukces.
GateKiller

8
Myślę, że lepiej zacząć od łatwych do ominięcia testów, aby sprawdzić, czy są wystarczające.
pbreitenbach,

211

13
Ten jest świetny. Link do strony jest random.irb.hr/signup.php . Czasami jest o wiele łatwiej
Marcio Aguiar

22
Jedynym problemem jest to, że dla większości ludzi jest to naprawdę trudne, ale komputery zwykle nie mają z tym problemu.
Tim Matthews,

7
Uważam, że odpowiedź na ten problem to -3?
dancavallaro,

2
@Erik, niezupełnie. Utrzymuje również tych, którzy mają doktoraty z informatyki, ale nie chcą zawracać sobie głowy.
BobbyShaftoe

28
-3 wydaje się poprawne. Pamiętam, jak jakiś czas temu korzystałem z tej witryny do badań, a kiedy dotarłem do Captcha, byłem bardzo szczęśliwy, ponieważ było fajnie i inaczej. Służy do dostępu do generatora liczb losowych kwantowych przy użyciu rzeczywistego źródła rozpadu promieniotwórczego.
Alex

57

Chyba że coś mi brakuje, co jest nie tak z używaniem reCAPTCHA, ponieważ cała praca jest wykonywana zewnętrznie.

Tylko myśl.


17
Re-captcha jest nieprzyjazny dla użytkownika. Chwytaki są wystarczająco złe. Jednak utrudnienie użytkownikom uzyskania niewielkiej korzyści OCR jest zdecydowanie wrogie.
pbreitenbach,

19
dlaczego jest nieprzyjazny dla użytkownika? czy spam jest przyjazny dla użytkownika?
Elzo Valugi

14
Jest to wrogie dla użytkownika, ponieważ czasami obrazy są trudne do odkodowania nawet dla ludzi i może powodować frustrację u legalnych użytkowników, gdy to się stanie. Zobacz link Josha do najgorszego CAPTCHAS, aby zobaczyć przykłady zbyt trudnych do zdekodowania obrazów.
Andrei Fierbinteanu,

4
@Andrei zawsze możesz sprawić, aby reCAPTCHA załadował kolejny obraz, jeśli jest to dla ciebie zbyt trudne.
mhitza

23
reCAPTCHA jest w porządku i implementuje opcję ułatwień dostępu, o której nawet 95% własnych rozwiązań nie myśli.
alp.

42

Zaletą tego podejścia jest to, że dla większości ludzi CAPTCHA nigdy nie będzie widoczny!

Podoba mi się ten pomysł, czy nie ma sposobu, aby po prostu podłączyć się do systemu powtórzeń? Chodzi mi o to, że każdy, kto powie +100 powtórzeń, prawdopodobnie będzie człowiekiem. Więc jeśli mają przedstawiciela, nie musisz nawet zawracać sobie głowy robieniem NIC w zakresie CAPTCHA.

Jeśli tak nie jest, wyślij to, jestem pewien, że nie zajmie tylu postów, aby dostać się do 100, a społeczność natychmiast rzuci się na kogoś, kto wydaje się spamować z obraźliwymi tagami, dlaczego nie dodać linku „zgłoś spam” to obniża o 200? Zdobądź 3 z nich, odblokowanie osiągnięcia Spambot, pa pa;)

EDYCJA : Powinienem również dodać, że podoba mi się matematyka dla CAPTCHA, która nie jest obrazem. A może zwykła zagadka. Może sprawić, że publikowanie będzie jeszcze bardziej interesujące ^ _ ^


13
Co się stanie, jeśli dane logowania do konta wysokiej karmy zostaną skradzione?
James McMahon

20
@nemo Więc sobie z tym poradzisz. Ale bardzo mało powodów, aby unikać rozwiązania tylko z tego powodu.
pbreitenbach,

Ponieważ wszyscy widzieliby spam i wysoką karmę i wiedzieli, że konto zostało skradzione.
hamstar

37

Co powiesz na captcha honeypot ?


4
Wyjaśnienie Honeypot Captcha (który wygląda bardzo dobrze): Boty uwielbiają formy. Wypełniają wszystkie pola. Captcha honeypot zawiera pole, które jest ukryte przez CSS, więc widzą je tylko boty (i te z IE 3.0). Jeśli jest wypełniony, to jest bot. Bardzo łatwe do wdrożenia.
Clay Nichols

5
Ponownie, można go ominąć przy minimalnym nakładzie czasu. To prawda, że ​​uda ci się zablokować niektóre skrypty skryptowe, ale jeśli Twoja witryna ma wartość, nie jest to główne zagrożenie.
AviD,

captcha honeypot są szkodliwe dla użyteczności - czytniki ekranu nie będą ignorować ukrytych pól formularzy.
Bayard Randel

Tak, jest to łatwe do wdrożenia i działa naprawdę dobrze. Dostępność to jedyny prawdziwy problem.
mem

6
dostępność można po prostu ominąć, dodając tekst:Hey, if youre a human, keep this field blank!
Strae

30

Unikaj najgorszych CAPTCHA wszechczasów .

Ciekawostki są OK, ale będziesz musiał napisać każdy z nich :-(

Ktoś musiałby je napisać.

Możesz zadawać pytania o ciekawostki w ten sam sposób, w jaki ReCaptcha drukuje słowa. Oferuje dwa słowa, z których jedno zna odpowiedź, drugie, którego nie zna - po wystarczającej liczbie odpowiedzi na drugim zna teraz również odpowiedź na to pytanie. Zadaj dwa pytania:

Kobieta potrzebuje mężczyzny tak jak ryba potrzebuje?

Pomarańczowy Pomarańczowy Pomarańczowy. Wpisz zielony.

Oczywiście może to wymagać połączenia z innymi technikami, takimi jak liczniki czasu lub obliczane tajemnice. Pytania będą musiały zostać zmienione / wycofane, więc aby utrzymać podaż, możesz ad-hoc dodać:

Wpisz swoje oczywiste pytanie:

Nie potrzebujesz nawet odpowiedzi; inni ludzie to zrozumieją. Być może będziesz musiał zezwolić na oznaczanie pytań jako „zbyt trudne”, na przykład: „asdf ejflf asl; jf ei; fil; asfas”.

Teraz, aby spowolnić kogoś, kto korzysta z botu do gier StackOverflow, należy obrócić pytania według adresu IP - więc ten sam adres IP nie otrzyma tego samego pytania, dopóki wszystkie pytania nie zostaną wyczerpane. Spowalnia to budowanie słownika znanych pytań, zmuszając ludzkiego właściciela botów do odpowiedzi na wszystkie twoje pytania.


14
Bądź ostrożny z pytaniami, które mogą być dla ciebie łatwe i niezwykle trudne dla osób z różnych krajów, które nie opanowały angielskiego, lub dla osób wywodzących się z innej kultury. Mogą się zdenerwować, jeśli zmusisz ich do używania słownika tylko do logowania! Albo jeszcze gorzej, po prostu przestają korzystać z witryny.
23

14
„Kobieta potrzebuje mężczyzny tak jak ryba potrzebuje?” Jaka jest odpowiedź na to pytanie?
Lotus Notes

2
rower. Cytat Iriny Dunn (spopularyzowany przez Glorię Steinem).
webbiedave

9
... jak ryba potrzebuje rybki.
matt lohkamp,

28

Widziałem to raz na stronie znajomego. Sprzedaje to za 20 dolców. To sztuka 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'   

2
+1, chociaż nie sądzę, że powinieneś płacić za coś takiego. Wolę zbudować go od zera.
Dalin Seivewright

5
fajnie, ale potrzebowałbym również wersji mówionej dla niewidomych
pro

29
Problem polega na tym, że złamanie obrazu jest łatwiejsze niż obrazu. Wszystko, co musisz zrobić, to wczytać go w obraz, a masz doskonały czarno-biały obraz do wykonania OCR.
Andrei Krotkov

@Andrei, istnieje alternatywna wersja tego, wygenerowana za pomocą „figletu”, która może „zgnieść” razem znaki, aby znaki captcha dzieliły znaki ASCII. Są one nieco trudniejsze do rozpoznania.
Pasi Savolainen

58
Może to być reklama, ale a) jest to prawidłowa odpowiedź na pytanie oraz b) autor wyraźnie stwierdza, że ​​to przez znajomego (co oznacza, że ​​wyraźnie jest stronniczy), więc nie widzę żadnego problemu z odpowiedzią .
Michael Stum

28

CAPTCHA w swojej obecnej koncepcji jest zepsuty i często łatwo go ominąć. ŻADNE z istniejących rozwiązań nie działa skutecznie - GMail osiąga sukces jedynie w 20% przypadków.

Jest to o wiele gorsze, ponieważ w tej statystyce używa się tylko OCR, a istnieją inne sposoby - na przykład proxy CAPTCHA i farmy CAPTCHA. Niedawno przemawiałem na ten temat w OWASP, ale ppt nie jest jeszcze online ...

Chociaż CAPTCHA nie może zapewnić rzeczywistej ochrony w żadnej formie, może być wystarczająca dla twoich potrzeb, jeśli chcesz zablokować zwykłe śmieci przejeżdżające samochodem. Ale to nie powstrzyma nawet półprofesjonalnych spamerów.

Zazwyczaj w przypadku witryny z zasobami o dowolnej wartości do ochrony potrzebne jest trzyetapowe podejście:

  • Odpowiedzi przepustnicy tylko od uwierzytelnionych użytkowników nie zezwalają na anonimowe posty.
  • Zminimalizuj (nie zapobiegaj) kilka postów na śmieci od uwierzytelnionych użytkowników - np. Opartych na reputacji. Pomocny może tu również moderator ludzki, ale wtedy masz inne problemy - mianowicie zalanie (a nawet zatopienie) moderatora, a niektóre strony wolą otwartość ...
  • Użyj heurystycznej logiki po stronie serwera, aby zidentyfikować zachowanie podobne do spamu lub lepsze zachowanie inne niż ludzkie.

CAPTCHA może pomóc TINY bitowi z drugim zębem, po prostu dlatego, że zmienia ekonomię - jeśli inne zęby są na swoim miejscu, nie warto dłużej męczyć się przebiciem CAPTCHA (minimalny koszt, ale wciąż koszt), aby odnieść sukces w takim niewielka ilość spamu.

Ponownie, nie cały twój spam (i inne śmieci) zostanie wygenerowany komputerowo - przy użyciu serwera proxy CAPTCHA lub farmy, źli faceci mogą cię spamować.


Serwer proxy CAPTCHA służy do udostępniania Twojego obrazu użytkownikom innych witryn, np. Pornografii, gier itp.

Farma CAPTCHA ma wielu tanich robotników (Indie, Daleki Wschód itp.), Którzy je rozwiązują ... zazwyczaj od 2 do 4 $ za 1000 rozwiązanych problemów. Ostatnio widziałem post na ten temat w serwisie eBay ...


Serwery proxy i farmy nie niszczą go ani nie omijają „CAPTCHA”, ponieważ są rozwiązywani przez ludzi. Rzeczywiście, ich istnienie świadczy o tym, że obecne metody działają! CAPTCHA nie oznacza „Rodzaju przedstawienia, którego chcę” tylko „Czy to człowiek poddający się”…
Fraser

10
Dokładnie! Ale CAPTCHA są najczęściej stosowane w celu zapobiegania „botom” - i nie ma znaczenia, czy te boty są ludźmi, czy nie, ich celem jest zapobieganie masowemu, nieosobowemu użytkowaniu. To tylko dowodzi tego, co zawsze mówię, CAPTCHA rozwiązuje zły problem (i robi to bardzo źle) ...
AviD

W wielu sytuacjach captcha jest w porządku. Chodzi o to, że właściciele witryn internetowych powinni wybrać rozwiązanie równoważące wrażenia użytkownika z kontrolą. Dla niektórych brak captcha. Dla innych captcha. Dla jeszcze innych coś innego. Ale samo odrzucenie captcha nie jest mądre.
pbreitenbach,

1
Problem wynika z myślenia, że ​​wprowadzenie CAPTCHA da Tobie taką kontrolę. Nie robi. Ani jednego istotnego kawałka. Istnieją rzadkie sytuacje, w których może to przynieść pewną wartość, ale NIE „kontrola”. (Często wspominałem tutaj o CAPTCHA, a wraz z innymi mechanizmami daje to trochę więcej, aby spamowanie nie było opłacalne.)
AviD,

27

Dlatego CAPTCHA jest obowiązkowa dla wszystkich użytkowników z wyjątkiem moderatorów. [1]

To niesamowicie głupie. Czy będą użytkownicy, którzy mogą edytować dowolny post na stronie, ale nie mogą publikować bez CAPTCHA? Jeśli masz wystarczającą liczbę przedstawicieli, aby zlekceważyć posty, masz wystarczającą liczbę przedstawicieli do opublikowania postów bez CAPTCHA. Zrób to wyżej, jeśli musisz. Ponadto istnieje wiele metod wykrywania spamu, które można zastosować bez rozpoznawania obrazu, dzięki czemu nawet niezarejestrowani użytkownicy nigdy nie będą musieli wypełniać tych zapomnianych przez Boga formularzy CAPTCHA.



20

Co powiesz na wykorzystanie samej społeczności do dwukrotnego sprawdzenia, czy wszyscy tutaj są ludźmi, czyli czymś w rodzaju sieci zaufania? Aby znaleźć jedną naprawdę godną zaufania osobę do uruchomienia sieci, sugeruję użycie tego CAPTCHA, aby upewnić się, że jest on absolutnie iw 100% człowiekiem.

Rapidshare CAPTCHA - Hipoteza Riemanna http://codethief.eu/kram/_/rapidshare_captcha2.jpg

Z pewnością istnieje niewielka szansa, że ​​byłby zbyt zajęty przygotowywaniem przemówienia o Fields Medal, aby pomóc nam zbudować sieć zaufania, ale dobrze ...


17

Asirra jest najbardziej uroczą captcha w historii.


Na początku czytałem to jako „Asirra jest najbardziej podatną na przyjęcie captcha w historii”. co mnie lekko odrzuciło. Zgadzam się, że jest to prawdopodobnie najbardziej urocze, ale tak jak napisano na stronie, twórca botów może po prostu zapisać wszystkie obrazy (może to chwilę potrwać), sklasyfikować je, a następnie bot z łatwością je zepsuje.
Dalin Seivewright

7
jak niewidomy może na nie odpowiedzieć?
BBetances

jest prawie taki sam jak reCAPTCHA. szukamy mniej irytującego i nie opartego na obrazach podejścia.
AhmetB - Google

Muszę powiedzieć, że używają całkiem dużej liczby zdjęć, aby sprawdzić swoje demo.
pimvdb

1
Miałem 3 przejścia na to, zanim przyznałem, że jestem człowiekiem - prawdopodobnie dlatego, że niektóre obrazy wyglądały po prostu jak duże futro.
Kramii

16

Wystarczy, że użytkownik rozwiąże proste wyrażenia arytmetyczne:

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

itp.

Gdy spamerzy się złapią, ich wykrycie powinno być dość łatwe. Za każdym razem, gdy wykryty zostanie spamer, przełączaj się między dwoma następującymi poleceniami:

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

Oczywiście powodem tego jest to, że wszyscy spamerzy są wystarczająco sprytni, aby użyć evalrozwiązania captcha w jednym wierszu kodu.


1
Również +1 za okrucieństwo, ale chciałem tylko dodać, że to ze mną nie zadziała, używam dostawcy eval VB.NET i sprawdzam format c: lub rm -rf, nowe linie, dwukropki, średniki itp. Potrzebujesz być trochę bardziej pomysłowym niż to. Poza tym nigdy nie pozwalam, aby skrypty Linuksa działały jako root, dlatego też to nie działałoby.
Stefan Steiger,

@Longpoke To po prostu nie działa. W większości współczesnych Uniksów jest wbudowana ochrona rmprzed uruchomieniem -rf /.
hamstergene

lol, byłoby zabawnie, gdybyś to powiedział, żeby zmusić mnie do wypróbowania. Może zamiast tego zadziała rm -rf / *. W każdym razie istnieje wiele innych złych rzeczy, które możesz zrobić.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

Zakłada to również, że ludzie nie wiedzą o Pythonie literal_eval(lub odpowiednikach w innych językach), co jest dość smutnym faktem.
Petr Viktorin

rm -rf ~byłby destrukcyjny, gdyby skrypt działał na czyjejś osobistej maszynie
kirb

16

Użyłem następującej prostej techniki, która nie jest niezawodna. Jeśli ktoś naprawdę chce to ominąć, łatwo jest spojrzeć na źródło (tj. Nie nadaje się do Google CAPTCHA), ale powinno to oszukać większość botów.

Dodaj 2 lub więcej pól formularza w ten sposób:

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

Następnie użyj CSS, aby je ukryć:

.hideme {
    display: none;
}

Po przesłaniu sprawdź, czy te pola formularza nie zawierają żadnych danych, jeśli nie powiodą się w formularzu. Powodem jest to, że boty czytają HTML i próbują wypełnić każde pole formularza, podczas gdy ludzie nie zobaczą pól wejściowych i nie zostawią ich w spokoju.

Jest oczywiście wiele innych rzeczy, które możesz zrobić, aby uczynić to mniej użytecznym, ale to tylko podstawowa koncepcja.


7
„honeypot captcha”
mpen

15

Chociaż wszyscy powinniśmy znać podstawowe matematyki, puzzle matematyczne mogą powodować pewne zamieszanie. W twoim przykładzie jestem pewien, że niektórzy odpowiedzieliby „8” zamiast „1”.

Czy odpowiedni byłby zwykły ciąg tekstu z losowymi znakami pogrubionymi lub kursywą? Użytkownik musi jedynie wpisać pogrubioną / pochyloną czcionkę jako CAPTCHA.

Eg s sdfa t werwe a jh c sad k oghvefdhrffghlfgdhowfgh

W tym przypadku „stosem” byłby CAPTCHA. Istnieje oczywiście wiele odmian tego pomysłu.

Edycja: przykładowe warianty rozwiązujące niektóre potencjalne problemy związane z tym pomysłem:

  • używając losowo kolorowych liter zamiast pogrubienia / kursywy.
  • używanie co drugiej czerwonej litery dla CAPTCHA (zmniejsza możliwość rozpoznawania przez CAPTCHA przez boty identyfikujące litery w innym formacie)

1
Podoba mi się ten - na przykład „proszę wpisać słowo zapisane trzecią podkreśloną czerwoną literą, czwartą pogrubioną zieloną literą i piątą niepogrubioną niebieską literą”.
An̲̳̳drew

9
Ten przykład powyżej „ssdfatwerweajhcsadkoghvefdhrffghlfgdhowfgh” można rozwiązać za pomocą prostego wyrażenia regularnego
Alex

Nie byłoby to dobre dla użytkowników z acalcula. Są naukowcy z tym schorzeniem, więc nie jest nierozsądne, że mogą być przy nim programiści.
BobbyShaftoe

Świetny pomysł! Być może nawet grając ze zmieniającymi się kolorami pierwszego planu / tła, możesz uzyskać tekst, który wyświetla tekst łatwo widoczny dla ludzi, ale zbyt losowy dla botów? Oczywiście trudniej jest to osobom niewidomym :-(
Shalom Craimer

2
Używanie kolorów może komplikować rzeczy, ponieważ trzeba wspierać różne formy ślepoty na kolory. W przeciwnym razie brzmi to całkiem nieźle.
KarstenF,


12

Wiem, że nikt tego nie przeczyta, ale co z psem lub kotem CAPTCHA?

Musisz powiedzieć, który to kot czy pies, maszyny nie mogą tego zrobić .. http://research.microsoft.com/asirra/

Jest fajny ..


4
Komputery nie mogą tego zrobić. Nie mogą też ślepić ludzi.
TRiG,

1
Ani ja, patrząc na to na monitorze wysokiej rozdzielczości. Te obrazy są małe. Jeden z nich był jakimś nieznanym stworzeniem za białym płotem.
jsims281,

10

Używam tylko prostych pytań, na które każdy może odpowiedzieć:

Jakiego koloru jest niebo?
Jakiego koloru jest pomarańcza?
Jakiego koloru jest trawa?

To sprawia, że ​​ktoś musi zaprogramować bota na twojej stronie, co prawdopodobnie nie jest warte wysiłku. Jeśli tak, wystarczy zmienić pytania.


Cyc może rozwiązać to w trywialny sposób ... i jest to oprogramowanie typu open source. Wdrożenie wymagałoby najwyżej kilku godzin pisania skryptów.
rmeador,

jest to również używane przez forum ubuntu. podoba mi się to, a realizacja kontroli typu „2 + 2 =?” lub „jaka jest pierwsza litera alfabetu” jest bardzo prosta.
pistacchio

8
Odpowiedzi: 1) W tej chwili jasnoniebieski, później czerwony, potem czarny z nutami pomarańczy w pobliżu centrum miasta. 2) pomarańczowy, chyba że jest spleśniały, to jest zielony, czarny lub biały. 3) brązowy, w południowej Kalifornii, chyba że jesteś w Beverly Hills, to jest zielony.
mmr

52
@mmr Widzisz, to właściwie zaleta systemu, nie pozwala smartassom na publikowanie komentarzy ...
tghw

2
Druga i trzecia odpowiedź są stronnicze w stosunku do ludzi żyjących na pustyniach lub w Baltimore.
Mike Robinson

10

Osobiście nie lubię CAPTCHA, ponieważ szkodzi to użyteczności i nie rozwiązuje problemu bezpieczeństwa powodującego unieważnienie ważnych użytkowników.

Wolę metody wykrywania botów, które można wykonać po stronie serwera. Ponieważ masz prawidłowych użytkowników (dzięki OpenID), możesz zablokować tych, którzy nie zachowują się, wystarczy zidentyfikować wzorce bota i dopasować go do wzorców typowego użytkownika i obliczyć różnicę.

Davies, N., Mehdi, Q., Gough, N.: Tworzenie i wizualizacja inteligentnego NPC za pomocą silników gier i narzędzi AI http://www.comp.glam.ac.uk/ASMTA2005/Proc/pdf/game-06 .pdf

Golle, P., Ducheneaut, N.: Zapobieganie botom do grania w gry online <- ACM Portal

Ducheneaut, N., Moore, R.: The Social Side of Gaming: Study of Interaction Patterns in a Massive Multiplayer Online Game

Pewnie większość tych odniesień wskazuje na wykrywanie botów w grach wideo, ale to dlatego, że taki był temat naszej grupy zatytułowanej „ Wojny robotów: eksploracja identyfikacji robotów w grze” . Nie został opublikowany ani nic, tylko coś do projektu szkolnego. Mogę wysłać e-mail, jeśli jesteś zainteresowany. Faktem jest jednak, że nawet jeśli jest oparty na wykrywaniu botów w grach wideo, możesz uogólnić go na sieć, ponieważ użytkownik jest przywiązany do wzorców użytkowania.

Zgadzam się z metodą tego podejścia MusiGenesis, ponieważ używam jej na mojej stronie i działa ona całkiem dobrze. Niewidzialny proces CAPTCHA jest porządnym sposobem blokowania większości skryptów, ale nadal nie uniemożliwia autorowi skryptów odwrotnej inżynierii twojej metody i „fałszowania” wartości, których szukasz w javascript.

Powiem, że najlepszą metodą jest 1) ustanowienie użytkownika, abyś mógł zablokować go, gdy jest zły, 2) zidentyfikowanie algorytmu, który wykrywa typowe wzorce w porównaniu z nietypowymi wzorcami korzystania ze strony i 3) odpowiednio zablokować tego użytkownika.


Dlaczego bot nie może zarejestrować OpenID? Osoba atakująca musi tylko utworzyć własnego wydawcę OpenID.
rjmunro

Tak @ rjmunro, i to jest dobra rzecz. Trudność internetu polega na identyfikacji anonimowych użytkowników. Jeśli bot zarejestruje OpenID i zidentyfikujesz tego użytkownika OpenID jako bota, możesz go zamknąć. Nie jest już anonimowy. Nie zapobiega to wielokrotnym rejestracjom przez tego samego dostawcę, ale możesz wyłączyć tego dostawcę zezwalając na boty. Celem jest jak najlepsze usunięcie anonimowości w Internecie.
jwendl

10

Mam kilka pomysłów na ten temat, którymi chcę się z tobą podzielić ...

Pierwszy pomysł, aby uniknąć OCR

Captcha, która ma jakąś ukrytą część przed użytkownikiem, ale pełny obraz to dwa kody razem, więc programy OCR i farmy captcha odczytują obraz, który zawiera część widoczną i ukrytą, próbują rozszyfrować oba z nich i nie można ich przesłać. .. - Mam wszystko gotowe, aby to naprawić i pracować online.

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

Drugi pomysł, aby to ułatwić

Strona z wieloma słowami, że człowiek musi wybrać właściwą. Mam również ten, jest prosty. Słowa są obrazami, które można kliknąć, a użytkownik musi kliknąć odpowiedni.

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

Trzeci pomysł bez obrazów

To samo co poprzednie, ale z divami i tekstami lub małymi ikonami. Użytkownik musi kliknąć tylko jedną poprawną div / literę / obraz, cokolwiek.

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

Ostateczny pomysł - nazywam to CicleCaptcha

I jeszcze jeden mój CicleCaptcha , użytkownik musi zlokalizować punkt na obrazie. Jeśli go znajdzie i kliknie, oznacza to, że osoba, maszyny prawdopodobnie zawiodły lub muszą stworzyć nowe oprogramowanie, aby znaleźć sposób na to.

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

Zapraszamy krytyków.


Re-captcha ma tekst na mowę dla swoich słów. Może ci powiedzieć, gdzie kliknąć.
Robert P.

@RobertP Kliknięcie, gdy jesteś niedowidzący, przypomina strzelanie, gdy jesteś niedowidzący ... „Po prostu celuj w głowę”.

8
@pst "Trochę w lewo. Zgadza się, trochę więcej. Dobrze. Dobrze. Teraz z powrotem. W górę. Nie, w drugą stronę. Tak, masz to. Jeszcze trochę. Tak. Tylko trochę więcej. Prawie tam. Prawie tam ... prawie ... prawie ... CAPTCHA !!! "
Robert P


7

Ostatnio zacząłem dodawać tag z nazwą i identyfikatorem ustawionym na „wiadomość”. Ustawiłem go jako ukryty za pomocą CSS (wyświetlanie: brak). Roboty spamujące to widzą, wypełniają i przesyłają formularz. Po stronie serwera, jeśli pole tekstowe o nazwie id jest wypełnione, oznaczam post jako spam.

Kolejna technika, nad którą pracuję, losowo generuje nazwy i identyfikatory, przy czym niektóre z nich to sprawdzanie spamu, a inne zwykłe pola.

Działa to dla mnie bardzo dobrze i nie otrzymałem jeszcze żadnego pomyślnego spamu. Mam jednak znacznie mniej odwiedzających moje strony :)


Użycie css do ukrycia pola formularza i stwierdzenie, że jest puste, również zadziałało dla mnie. Nie głupi dowód, ale to dobra opcja.
Chris,

Technika 1: Honeypot
kevinji

6

Bardzo prosta arytmetyka jest dobra. Niewidomi będą mogli odpowiedzieć. (Ale jak powiedział Jarod, uważaj na pierwszeństwo operatora.) Rozumiem, że ktoś mógłby napisać parser, ale to powoduje, że spamowanie jest bardziej kosztowne.

Wystarczająco proste i nie będzie trudno kodować wokół niego. Widzę tutaj dwa zagrożenia:

  1. przypadkowi spamboty i ludzie, którzy mogliby je poprzeć; i
  2. boty stworzone do gry Stack Overflow

Z prostą arytmetyką możesz pokonać zagrożenie nr 1, ale nie zagrożenie nr 2.


Przypuszczam, że parser jest znacznie łatwiejszy niż pisanie programu do przechwytywania obrazu. Pamiętaj, że najłatwiejszą rzeczą, którą oferujesz użytkownikom, jest to, czego prawdopodobnie użyje spambot. Niestety captcha no-JS musi być trudniejszy.
stalepretzel

5

Co się stanie, jeśli użyjesz kombinacji pomysłów captcha, które posiadasz (wybierz jeden z nich - lub wybierz jeden z nich losowo):

  • Tekst captcha ASCII: // (_) //
  • zagadki matematyczne: co to jest 7 minus 3 razy 2?
  • ciekawostki: co smakuje lepiej, ropucha czy popsicle?

z dodaniem tego samego captcha w ukrytej sekcji strony css - pomysł na plaster miodu. W ten sposób uzyskasz jedno miejsce, w którym oczekujesz poprawnej odpowiedzi, i drugie, w którym odpowiedź powinna pozostać niezmieniona.


1
„Co smakuje lepiej” jest moim zdaniem dość subiektywne. Ludzie, którzy wychodzą na punkcie smaku, będą interpretowani jako bot. Co więcej, przy tylko dwóch odpowiedziach szansa na zaliczenie bota wynosi 50%.
pimvdb,

To prawda z subiektywnej strony, ale konkretnie pochodziło z pierwotnego pytania. Miałem na myśli losowe użycie wszystkich trzech (lub wielu) typów. Również szansa na zaliczenie wynosi tylko 50%, jeśli odpowiedź jest wielokrotnego wyboru. Jeśli użytkownik wpisze słowo bez wskazania możliwych odpowiedzi na liście, botowi trudniej będzie wybrać prawidłowe słowa w pytaniu / odpowiedzi.
TheEmirOfGroofunkistan

5

Miałem zadziwiająco dobre wyniki z prostym polem „Pozostaw to pole puste:”. Boty wydają się wypełniać wszystko, szczególnie jeśli nazwiesz pole czymś w rodzaju „URL”. W połączeniu z rygorystycznym sprawdzaniem odsyłaczy jeszcze nie udało mi się przejść przez bota.

Nie zapomnij o dostępności tutaj. Captchas są notorycznie bezużyteczne dla wielu osób korzystających z czytników ekranu. Proste problemy matematyczne lub bardzo trywialne ciekawostki (podobało mi się pytanie „jakiego koloru jest niebo”) są znacznie bardziej przyjazne dla użytkowników niedowidzących.


5

Prosty tekst brzmi świetnie. Przekupić społeczność za pracę! Jeśli uważasz, podobnie jak ja, że ​​punkty przedstawicielstwa SO mierzą zaangażowanie użytkownika w pomoc w osiągnięciu sukcesu w witrynie, całkowicie uzasadnione jest oferowanie punktów reputacji, aby pomóc chronić witrynę przed spamerami.

Zaoferuj +10 reputacji za każdy wkład w proste pytanie i zestaw poprawnych odpowiedzi. Pytanie powinno być odpowiednio oddalone (edycja odległości) od wszystkich istniejących pytań, a reputacja (i pytanie) powinna stopniowo zanikać, jeśli ludzie nie mogą na nie odpowiedzieć. Powiedzmy, że jeśli odsetek błędów przy poprawnych odpowiedziach jest większy niż 20%, wówczas zgłaszający traci jeden punkt reputacji za każdą błędną odpowiedź, maksymalnie do 15. Tak więc, jeśli prześlesz złe pytanie, otrzymasz teraz +10, ale ostatecznie to zrobisz netto -5. A może warto poprosić próbę użytkowników o głosowanie, czy pytanie captcha jest dobre.

Wreszcie, podobnie jak dzienny limit rep, powiedzmy, że żaden użytkownik nie może zarobić więcej niż 100 reputacji, przesyłając pytania captcha. Jest to rozsądne ograniczenie wagi przypisywanej takim wkładom, a także może pomóc w zapobieganiu rozsyłaniu przez spamerów pytań do systemu. Na przykład możesz wybrać pytania nie z jednakowym prawdopodobieństwem, ale z prawdopodobieństwem proporcjonalnym do reputacji osoby przesyłającej. Jon Skeet, nie przesyłaj żadnych pytań :-)


5

Wykonaj zapytanie AJAX w poszukiwaniu kryptograficznej wartości jednorazowej na serwerze. Serwer odsyła odpowiedź JSON zawierającą wartość jednorazową, a także ustawia plik cookie zawierający wartość jednorazową. Oblicz skrót SHA1 wartości jednorazowej w JavaScript, skopiuj wartość do ukrytego pola. Gdy użytkownik POST wypełnia formularz, odsyła teraz plik cookie z wartością nonce. Oblicz skrót SHA1 wartości jednorazowej z pliku cookie, porównaj z wartością w ukrytym polu i sprawdź, czy wygenerowałeś tę wartość jednorazową w ciągu ostatnich 15 minut (memcached jest do tego dobry). Jeśli wszystkie te czeki przejdą, opublikuj komentarz.

Ta technika wymaga, aby spamer usiadł i zorientował się, co się dzieje, a kiedy to zrobi, nadal musi odpalić wiele żądań i utrzymać stan plików cookie, aby uzyskać komentarz. Co więcej, widzą Set-Cookienagłówek tylko wtedy, gdy parsują i wykonują JavaScript w pierwszej kolejności i składają żądanie AJAX. Jest to o wiele więcej pracy niż większość spamerów jest skłonna wykonać, zwłaszcza że praca dotyczy tylko jednej witryny. Największym minusem jest to, że każdy z wyłączonym JavaScriptem lub wyłączonymi plikami cookie jest oznaczany jako potencjalny spam. Co oznacza, że ​​kolejki moderacji są nadal dobrym pomysłem.

Teoretycznie może to być zakwalifikowane jako bezpieczeństwo przez zaciemnienie, ale w praktyce jest doskonałe.

Nigdy nie widziałem, aby spamer próbował złamać tę technikę, chociaż może raz na kilka miesięcy ręcznie wprowadzam spam na ten temat, a to trochę dziwne.


5

1) Ludzcy rozwiązujący

Wszystkie wspomniane tutaj rozwiązania są omijane przez ludzkie rozwiązania solverów. Profesjonalny spambot utrzymuje setki połączeń, a gdy nie jest w stanie rozwiązać samego CAPTCHA, przesyła zrzut ekranu do zdalnych ludzkich solverów.

Często czytam, że ludzkie rozwiązania CAPTCHA łamią prawo. Cóż, jest to napisane przez tych, którzy nie wiedzą, jak działa ten (spamujący) przemysł.
Ludzkie solwery nie wchodzą w interakcje bezpośrednio z witrynami, które rozwiązują CAPTCHA. Nie wiedzą nawet, z których stron zostały pobrane i wysłane CAPTCHA. Wiem o kilkudziesięciu (jeśli nie setkach) firmach i / lub stronach internetowych oferujących usługi solverów, ale nie ma jednej do bezpośredniej interakcji z załamanymi tablicami.
Te ostatnie nie naruszają żadnego prawa, więc rozwiązanie CAPTCHA jest całkowicie legalne (i oficjalnie zarejestrowane) firmy. Nie mają zamiarów kryminalnych i mogą być na przykład wykorzystywane do zdalnego testowania, dochodzeń, weryfikacji koncepcji, prototypowania itp.

2) Spam kontekstowy

Boty AI (Artificial Intelligent) określają konteksty i utrzymują dialogi kontekstowe w różnych momentach z różnych adresów IP (różnych krajów). Nawet autorzy blogów często nie rozumieją, że komentarze pochodzą od botów. Nie będę wchodził w wiele szczegółów, ale na przykład boty mogą zapisywać ludzkie dialogi, przechowywać je w bazie danych, a następnie po prostu ponownie wykorzystywać (fraza po frazie), aby nie były wykrywalne jako spam przez oprogramowanie, a nawet ludzi.

Najczęściej głosowana odpowiedź mówi:

  • * „Teoria jest taka:
    • Bot spamowy nie obsługuje JavaScript i przesyła to, co widzi
    • Jeśli bot obsługuje JavaScript, natychmiast prześle formularz
    • Komentator przynajmniej przeczytał część strony przed opublikowaniem „*

a także odpowiedź typu plaster miodu i większość odpowiedzi w tym wątku jest po prostu błędna.
Śmiem twierdzić, że są to podejścia skazane na ofiarę

Większość robotów spamujących działa przez lokalne i zdalne przeglądarki obsługujące javascript (załatane i zarządzane) z różnych adresów IP (różnych krajów) i są dość sprytne, aby ominąć pułapki na miód i doniczki z miodem.

Innym problemem jest to, że nawet właściciele blogów często nie mogą wykryć, że komentarze pochodzą od bota, ponieważ tak naprawdę pochodzą one z dialogów ludzkich i komentarzy zebranych z innych forów internetowych (forów, komentarzy na blogach itp.)

3) Nowe podejście koncepcyjne

Przepraszam, usunąłem tę część jako wytrąconą


1
Opisałeś problem z prawie każdą odpowiedzią w tym wątku. Wszyscy byliby szybko pokonani, gdyby nie byli wyłączni dla małej witryny. Jeśli którekolwiek z nich zostanie użyte na dużej stronie lub w wielu małych witrynach (np. Jako wtyczka Wordpress), zostaną pokonane w ciągu jednego dnia. Tak naprawdę to nie są CAPTCHAS, ale szczęśliwe przypadki bezpieczeństwa przez zaciemnienie. Masz również rację; nowoczesny spam umieszcza komentarze, których nawet ja nie mogę rozpoznać jako spam. Zrezygnowałem z CAPTCHA i zamiast tego używam Molloma. Spam crowdsourcingowy to lepsze podejście imho.
Dan

5

Właściwie może być pomysł posiadania captcha związanego z programowaniem. Na przykład:

Captcha

Możliwe jest, że ktoś zbuduje moduł sprawdzania składni w celu ominięcia tego, ale obejście captcha wymaga dużo więcej pracy. Wpadłeś na pomysł posiadania podobnej captcha.


5
Z wyjątkiem: czy wiesz, że odpowiedź na przykładowe pytanie (na wypadek, gdyby ktoś natknął się na to później, a obrazu nie ma: „Ile błędów składniowych PHP $var == array(1 = 'one');;” zawiera) 1, nie jest 3? (Poważnie. Spróbuj $var == array(1 => 'one');;) ^ _ ~
pinkgothic

Heh, to było wystarczająco długo, że nie pamiętam, aby zrobić ten obraz. Oczywiście masz rację i nie sądzę, że byłoby to bardzo dobre jako captcha - ale może jako warunek wejścia na forum programowania.
Ross,

4

Muszę przyznać, że nie mam doświadczenia w walce ze robotami spamującymi i tak naprawdę nie wiem, jak są wyrafinowane. To powiedziawszy, nie widzę nic w artykule jQuery, którego nie można byłoby osiągnąć wyłącznie na serwerze.

Aby ponownie sformułować podsumowanie z artykułu jQuery:

  1. Podczas generowania formularza kontaktowego na serwerze ...
  2. Chwyć aktualny czas.
  3. Połącz ten znacznik czasu oraz tajne słowo i wygeneruj 32-znakowy „skrót” i zapisz go jako plik cookie w przeglądarce użytkownika.
  4. Przechowuj znacznik czasu hash lub „token” w ukrytym znaczniku formularza.
  5. Po wysłaniu formularza wartość znacznika czasu zostanie porównana z 32-znakowym „tokenem” przechowywanym w pliku cookie.
  6. Jeśli informacje nie są zgodne, brakuje ich lub znacznik czasu jest zbyt stary, przerwij wykonywanie żądania ...

Inną opcją, jeśli chcesz korzystać z tradycyjnego obrazu CAPTCHA bez konieczności generowania go przy każdym żądaniu, jest wstępne wygenerowanie go offline. Następnie musisz losowo wybrać jeden do wyświetlenia z każdym formularzem.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.