Praktische nicht bildbasierte CAPTCHA-Ansätze?


318

Es sieht so aus, als würden wir dem Stapelüberlauf CAPTCHA- Unterstützung hinzufügen . Dies ist erforderlich, um Bots, Spammer und andere böswillige Skriptaktivitäten zu verhindern. Wir möchten nur, dass Menschen hier Dinge posten oder bearbeiten!

Wir werden ein JavaScript (jQuery) CAPTCHA als erste Verteidigungslinie verwenden:

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

Der Vorteil dieses Ansatzes ist, dass für die meisten Menschen das CAPTCHA niemals sichtbar sein wird!

Für Menschen mit deaktiviertem JavaScript benötigen wir jedoch immer noch einen Fallback, und hier wird es schwierig.

Ich habe ein traditionelles CAPTCHA-Steuerelement für ASP.NET geschrieben, das wir wiederverwenden können.

CAPTCHA Bild

Ich würde es jedoch vorziehen, etwas Textuelles zu verwenden, um den Aufwand zu vermeiden, alle diese Bilder bei jeder Anforderung auf dem Server zu erstellen.

Ich habe Dinge gesehen wie ..

  • ASCII-Text-Captcha: \/\/(_)\/\/
  • Mathe-Rätsel: Was ist 7 minus 3 mal 2?
  • Wissenswertes: Was schmeckt besser, eine Kröte oder ein Eis am Stiel?

Vielleicht neige ich hier nur zu Windmühlen, aber ich hätte gerne ein weniger ressourcenintensives, nicht bildbasiertes <noscript>kompatibles CAPTCHA, wenn möglich.

Ideen?


16
Es ist nicht erforderlich, ein Image auf dem Server zu erstellen. Sie müssen nur die Anfrage bearbeiten. Zum Beispiel <img src = "generateImage.aspx? Guid = blah">
Brian R. Bondy

58
Wissenswertes ist anfällig für kulturelle Vorurteile (denken Sie an einen Franzosen, der Ihre Frage beantwortet ...). Darüber hinaus können sie Benutzer ansprechen, deren Englisch nicht muttersprachlich ist. Außerdem können sie leicht mit roher Gewalt zerbrochen werden (Sie haben nur ~ 2 ^ # _ OfQuestions-Optionen).
Adam Matan

72
Was um alles in der Welt ist ein Eis am Stiel?
Fraser

57
Laut Wolfram Alpha ist "was 7 minus 3 mal 2 ist" 1. Ich dachte, es wäre 8. Ich denke, Sie haben gerade das Anti-Captcha erfunden.
Mike Robinson

50
@ Mike Robinson: Ich denke, Programmierer sollten über die Priorität von Operatoren im normalen Tagesgebrauch Bescheid wissen =)
Gnark

Antworten:


205

Eine Methode, die ich entwickelt habe und die perfekt zu funktionieren scheint (obwohl ich wahrscheinlich nicht so viel Kommentar-Spam bekomme wie Sie), besteht darin, ein verstecktes Feld zu haben und es mit einem falschen Wert zu füllen, z.

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

Ich habe dann ein Stück JavaScript, das den Wert jede Sekunde mit der Anzahl der Sekunden aktualisiert, für die die Seite geladen wurde:

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

Wenn das Formular dann gesendet wird, wenn der Antispam-Wert immer noch "lalalala" ist, dann markiere ich es als Spam. Wenn der Antispam-Wert eine Ganzzahl ist, überprüfe ich, ob er über 10 (Sekunden) liegt. Wenn es unter 10 ist, markiere ich es als Spam, wenn es 10 oder mehr ist, lasse ich es durch.

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

Die Theorie lautet:

  • Ein Spam-Bot unterstützt kein JavaScript und sendet das, was er sieht
  • Wenn der Bot JavaScript unterstützt, sendet er das Formular sofort
  • Der Kommentator hat vor dem Posten mindestens einen Teil der Seite gelesen

Der Nachteil dieser Methode ist, dass JavaScript erforderlich ist. Wenn Sie kein JavaScript aktiviert haben, wird Ihr Kommentar als Spam markiert. Ich überprüfe jedoch Kommentare, die als Spam markiert sind. Dies ist also kein Problem.

Antwort auf Kommentare

@ MrAnalogy: Der serverseitige Ansatz klingt ziemlich gut und ist genau das gleiche wie in JavaScript. Guter Anruf.

@AviD: Mir ist bewusst, dass diese Methode für direkte Angriffe anfällig ist, wie ich in meinem Blog erwähnt habe . Es verteidigt sich jedoch gegen einen durchschnittlichen Spam-Bot, der blindlings Müll in jede Form bringt, die er finden kann.


45
VERSION, DIE OHNE JAVASCRIPT FUNKTIONIERT Wie wäre es, wenn Sie dies mit ASP usw. tun und einen Zeitstempel für das Laden der Formularseite haben und diesen dann mit dem Zeitpunkt vergleichen, an dem das Formular gesendet wurde. Wenn ElapsedTime <10 Sekunden ist, handelt es sich wahrscheinlich um Spam.
Clay Nichols

28
Ganz offensichtlich umgehbar, wenn ein böswilliger Benutzer sich die Mühe macht, es anzusehen. Ich bin mir zwar sicher, dass Sie sich dessen bewusst sind, aber ich gehe davon aus, dass sie sich nicht darum kümmern werden ... Nun, wenn es sich nicht um eine Website von irgendeinem Wert handelt, dann haben Sie Recht und sie werden sich nicht darum kümmern - aber wenn es ist, dann werden sie es
tun

48
Hier ist eine Wendung, die ich benutze. Machen Sie den versteckten Wert zu einer verschlüsselten Zeit, die jetzt eingestellt ist. Stellen Sie nach dem Zurückschicken sicher, dass zwischen 10 Sekunden und 10 Minuten vergangen sind. Dies vereitelt Betrüger, die versuchen würden, einen immer gültigen Wert einzugeben.
Tim Scott

7
An alle, die darauf hingewiesen haben, dass Bots vorbei kommen könnten ... Das weiß ich, wie ich in der Antwort betont habe. Es ist eine sehr einfache Methode, um einen durchschnittlichen Bot und gelangweilte Benutzer zu stoppen. Ich benutze es derzeit in meinem Blog und bisher war es 100% erfolgreich.
GateKiller

8
Ich denke, es ist besser, mit einfach zu umgehenden Tests zu beginnen, um festzustellen, ob sie angemessen sind.
pbreitenbach

211

13
Das ist großartig. Der Link zur Site lautet random.irb.hr/signup.php . Manchmal ist es viel einfacher
Marcio Aguiar

22
Das einzige Problem ist, dass es für die Mehrheit der Menschen wirklich schwierig ist, aber Computer haben normalerweise kein Problem damit.
Tim Matthews

7
Ich glaube, die Antwort auf dieses Problem ist -3?
Dancavallaro

2
@Erik, nicht wirklich. Es hält auch diejenigen, die in Informatik promoviert haben, sich aber nicht darum kümmern wollen.
BobbyShaftoe

28
-3 scheint richtig zu sein. Ich erinnere mich, dass ich diese Website vor einiger Zeit für Recherchen genutzt habe und als ich zum Captcha kam, war ich so glücklich, weil es Spaß machte und anders war. Es dient zum Zugriff auf einen Quantenzufallszahlengenerator unter Verwendung einer tatsächlichen radioaktiv zerfallenden Quelle.
Alex

57

Was ist falsch daran, wenn ich nichts vermisse? reCAPTCHA, da die gesamte Arbeit extern erledigt wird?

Nur ein Gedanke.


17
Re-Captcha ist benutzerfeindlich. Captchs ist schlimm genug. Es ist jedoch positiv feindlich, es den Benutzern schwerer zu machen, einen winzigen OCR-Vorteil zu erzielen.
pbreitenbach

19
Warum ist benutzerfeindlich? ist Spam benutzerfreundlich?
Elzo Valugi

14
Es ist benutzerfeindlich, da die Bilder selbst für Menschen manchmal schwer zu dekodieren sind und in diesem Fall bei legitimen Benutzern zu Frustration führen können. In Joshs Link zu den schlechtesten CAPTCHAS finden Sie einige Beispiele für zu schwer zu dekodierende Bilder.
Andrei Fierbinteanu

4
@Andrei Sie können reCAPTCHA jederzeit dazu bringen, ein anderes Bild zu laden, wenn es Ihnen zu schwer fällt.
Mhitza

23
reCAPTCHA ist in Ordnung und implementiert eine Eingabehilfenoption, an die 95% der selbst entwickelten Lösungen nicht einmal denken.
Alxp

42

Der Vorteil dieses Ansatzes ist, dass für die meisten Menschen das CAPTCHA niemals sichtbar sein wird!

Ich mag diese Idee. Gibt es keine Möglichkeit, uns einfach in das Repräsentantensystem einzuklinken? Ich meine, jeder mit +100 Wiederholungen ist wahrscheinlich ein Mensch. Wenn sie also Repräsentanten haben, müssen Sie sich nicht einmal die Mühe machen, irgendetwas in Bezug auf CAPTCHA zu tun.

Wenn dies nicht der Fall ist, senden Sie es. Ich bin sicher, es werden nicht so viele Posts benötigt, um auf 100 zu gelangen, und die Community wird sofort auf jemanden eintauchen, der mit anstößigen Tags zu spammen scheint. Warum nicht einen Link "Spam melden" hinzufügen? dass Downmods um 200? Holen Sie sich 3 davon, Spambot-Leistung freigeschaltet, Tschüss;)

EDIT : Ich sollte auch hinzufügen, ich mag die mathematische Idee für das Nicht-Bild CAPTCHA. Oder vielleicht ein einfaches Rätsel. Kann das Posten noch interessanter machen ^ _ ^


13
Was passiert, wenn Anmeldeinformationen eines Mitglieds mit hohem Karma gestohlen werden?
James McMahon

20
@nemo Dann beschäftigst du dich damit. Aber nur sehr wenig Grund, eine Lösung allein aus diesem Grund zu vermeiden.
pbreitenbach

Denn jeder würde den Spam und das hohe Karma sehen und wissen, dass ein Konto gestohlen wurde.
Hamstar

37

Was ist mit einem Honeypot Captcha ?


4
Erklärung von Honeypot Captcha (was sehr gut aussieht): Bots lieben Formen. Sie füllen alle Felder aus. Ein Honeypot-Captcha enthält ein Feld, das durch CSS VERSTECKT ist, sodass nur die Bots (und diejenigen mit IE 3.0) es sehen. Wenn es gefüllt ist, ist es ein Bot. Sehr einfach zu implementieren.
Clay Nichols

5
Wieder trivial umgehbar mit einem sehr minimalen Zeitaufwand. Sie werden zwar einige Scriptkiddies blockieren können, aber wenn Ihre Site einen Wert hat, ist dies nicht Ihre Hauptbedrohung.
AviD

Honeypot-Captchas sind schlecht für die Benutzerfreundlichkeit - Screenreader ignorieren versteckte Formularfelder nicht.
Bayard Randel

Ja, dies ist einfach bereitzustellen und funktioniert sehr gut. Zugänglichkeit ist das einzige wirkliche Problem.
Meme

6
Zugänglichkeit kann durch einfaches Hey, if youre a human, keep this field blank!
Umgehen des

30

Vermeiden Sie die schlimmsten CAPTCHAs aller Zeiten .

Trivia ist in Ordnung, aber Sie müssen jeden von ihnen schreiben :-(

Jemand würde sie schreiben müssen.

Sie können Trivia-Fragen genauso stellen wie ReCaptcha gedruckte Wörter. Es bietet zwei Wörter, von denen eines die Antwort kennt und eines nicht - nach genügend Antworten auf das zweite kennt es jetzt auch die Antwort darauf. Stellen Sie zwei wichtige Fragen:

Eine Frau braucht einen Mann wie ein Fisch einen?

Orange Orange Orange. Geben Sie grün ein.

Natürlich muss dies möglicherweise mit anderen Techniken gekoppelt werden, wie z. B. Zeitgebern oder berechneten Geheimnissen. Fragen müssten gedreht / in den Ruhestand versetzt werden. Um das Angebot an Fragen aufrechtzuerhalten, können Sie ad-hoc hinzufügen:

Geben Sie Ihre offensichtliche Frage ein:

Sie brauchen nicht einmal eine Antwort; andere Menschen werden das für Sie herausfinden. Möglicherweise müssen Sie zulassen, dass Fragen wie folgt als "zu hart" gekennzeichnet werden: "asdf ejflf asl; jf ei; fil; asfas".

Um jemanden zu verlangsamen, der einen StackOverflow-Gaming-Bot ausführt, müssen Sie die Fragen nach IP-Adresse drehen. Die gleiche IP-Adresse wird also erst dann angezeigt, wenn alle Fragen erschöpft sind. Dies verlangsamt das Erstellen eines Wörterbuchs bekannter Fragen und zwingt den menschlichen Besitzer der Bots, alle Ihre Trivia-Fragen zu beantworten.


14
Seien Sie vorsichtig mit Trivia-Fragen, da diese für Sie manchmal einfach und für Menschen aus verschiedenen Ländern, die kein Englisch beherrschen, oder für Menschen aus verschiedenen Kulturen unglaublich schwierig sein können. Sie könnten verärgert sein, wenn Sie sie zwingen, das Wörterbuch nur zum Anmelden zu verwenden! Oder noch schlimmer, sie nutzen die Website einfach nicht mehr.
ya23

14
"Eine Frau braucht einen Mann wie ein Fisch einen?" Was ist die Antwort auf diese Frage?
Lotus Notes

2
Fahrrad. Zitat von Irina Dunn (populär gemacht von Gloria Steinem).
Webbiedave

9
... wie ein Fisch einen Frauenfisch braucht.
Matt Lohkamp

28

Ich habe das einmal auf der Seite eines Freundes gesehen. Er verkauft es für 20 Dollar. Es ist ASCII-Kunst!

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, obwohl ich nicht denke, dass Sie für so etwas bezahlen sollten. Ich würde es lieber von Grund auf neu bauen lassen.
Dalin Seivewright

5
nett, würde aber auch eine gesprochene Version für Blinde brauchen
pro

29
Das Problem dabei ist, dass es einfacher als ein Bild zu knacken ist. Alles, was Sie tun müssten, ist, es in ein Bild einzulesen, und Sie haben ein perfektes Schwarzweißbild, auf dem Sie OCR ausführen können.
Andrei Krotkov

@Andrei, es gibt eine alternative Version dazu, die mit "figlet" generiert wurde. Dadurch können Zeichen zusammen "matschig" werden, sodass die Zeichen von captcha ASCII-Zeichen gemeinsam haben. Diese sind für OCR etwas schwieriger.
Pasi Savolainen

58
Es mag Werbung sein, aber a) es ist eine gültige Antwort auf die Frage und b) der Autor gibt eindeutig an, dass dies von einem Freund stammt (was bedeutet, dass er eindeutig voreingenommen ist), so dass ich kein Problem mit der Antwort sehe .
Michael Stum

28

CAPTCHA ist in seiner aktuellen Konzeptualisierung kaputt und oft leicht zu umgehen. KEINE der vorhandenen Lösungen funktioniert effektiv - GMail ist bestenfalls in nur 20% der Fälle erfolgreich.

Es ist tatsächlich viel schlimmer als das, da diese Statistik nur OCR verwendet und es andere Möglichkeiten gibt - zum Beispiel CAPTCHA-Proxys und CAPTCHA-Farmen. Ich habe kürzlich bei OWASP einen Vortrag zu diesem Thema gehalten, aber der ppt ist noch nicht online ...

Während CAPTCHA keinen tatsächlichen Schutz in irgendeiner Form bieten kann, kann es für Ihre Bedürfnisse ausreichen, wenn Sie gelegentlichen Drive-by-Müll blockieren möchten. Aber es wird nicht einmal semiprofessionelle Spammer aufhalten.

Für eine Site mit Ressourcen von beliebigem Wert zum Schutz benötigen Sie normalerweise einen dreigliedrigen Ansatz:

  • Drosseln Sie Antworten nur von authentifizierten Benutzern und lassen Sie anonyme Beiträge nicht zu.
  • Minimieren (nicht verhindern) Sie die wenigen Papierkorbbeiträge authentifizierter Benutzer - z. B. basierend auf der Reputation. Ein menschlicher Moderator kann auch hier helfen, aber dann haben Sie andere Probleme - nämlich das Überfluten (oder sogar Ertrinken) des Moderators, und einige Websites bevorzugen die Offenheit ...
  • Verwenden Sie serverseitige heuristische Logik, um Spam-ähnliches Verhalten oder besser nicht menschliches Verhalten zu identifizieren.

CAPTCHA kann mit dem zweiten Stift ein kleines bisschen helfen, einfach weil es die Wirtschaftlichkeit verändert - wenn die anderen Zinken vorhanden sind, lohnt es sich nicht mehr, sich die Mühe zu machen, das CAPTCHA (minimale Kosten, aber immer noch Kosten) zu durchbrechen, um dies zu erreichen eine kleine Menge Spam.

Auch hier wird nicht Ihr gesamter Spam (und anderer Müll) computergeneriert sein - mit dem CAPTCHA-Proxy oder der Farm können die Bösen echte Leute haben, die Sie spammen.


CAPTCHA-Proxy ist, wenn sie Ihr Bild Benutzern anderer Websites, z. B. Pornos, Spielen usw., zur Verfügung stellen.

Auf einer CAPTCHA-Farm lösen viele billige Arbeitskräfte (Indien, Fernost usw.) sie ... normalerweise zwischen 2 und 4 US-Dollar pro 1000 gelösten Captchas. Habe kürzlich einen Beitrag dazu bei Ebay gesehen ...


Proxies und Farmen brechen es nicht und umgehen 'CAPTCHA' nicht, da sie von Menschen gelöst werden. In der Tat ist ihre Existenz ein Beweis dafür, dass aktuelle Methoden funktionieren! CAPTCHA bedeutet nicht "Die Art der Einreichung, die ich will" nur "Ist es eine menschliche Einreichung" ...
Fraser

10
Genau! Aber CAPTCHAs werden am häufigsten verwendet, um "Bots" zu verhindern - und es spielt keine Rolle, ob diese Bots menschlich sind oder nicht, die Absicht ist es, Massengebrauch und nicht persönlichen Gebrauch zu verhindern. Dies beweist nur, was ich immer sage, CAPTCHA löst das falsche Problem (und tut es so schlecht) ...
AviD

Es gibt viele Situationen, in denen Captcha in Ordnung ist. Der Punkt ist, dass Websitebesitzer eine Lösung wählen sollten, die Benutzererfahrung mit Kontrolle in Einklang bringt. Für einige kein Captcha. Für andere Captcha. Für noch andere etwas anderes. Aber nur Captcha insgesamt zu entlassen, ist nicht klug.
pbreitenbach

1
Das Problem ergibt sich aus dem Gedanken, dass Sie durch das Einsetzen von CAPTCHA diese Kontrolle erhalten. Das tut es nicht. Kein wesentliches Stück. Es gibt einige seltene Situationen, in denen es einen Wert liefern kann, aber NICHT "Kontrolle". (Ich habe hier oft das CAPTCHA erwähnt, zusammen mit den anderen Mechanismen, die dazu beitragen, dass sich Spam nicht lohnt.)
AviD

27

Daher ist CAPTCHA für alle Benutzer außer Moderatoren obligatorisch. [1]

Das ist unglaublich dumm. Es wird also Benutzer geben, die jeden Beitrag auf der Website bearbeiten können , aber nicht ohne CAPTCHA? Wenn Sie genug Repräsentanten haben, um Beiträge abzustimmen, haben Sie genug Repräsentanten, um ohne CAPTCHA zu posten. Machen Sie es höher, wenn Sie müssen. Darüber hinaus gibt es zahlreiche Spam-Erkennungsmethoden, die Sie ohne Bilderkennung anwenden können, sodass selbst für nicht registrierte Benutzer das Ausfüllen dieser gottverlassenen CAPTCHA-Formulare niemals erforderlich wäre.



20

Wie wäre es, wenn Sie die Community selbst nutzen, um zu überprüfen, ob alle hier Menschen sind, dh so etwas wie ein Netz des Vertrauens? Um eine wirklich vertrauenswürdige Person zu finden, die das Web startet, schlage ich vor, dieses CAPTCHA zu verwenden, um sicherzustellen, dass er absolut und 100% menschlich ist.

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

Sicherlich gibt es eine winzige Chance, dass er zu beschäftigt mit der Vorbereitung seiner Rede zur Fields-Medaille ist, um uns beim Aufbau des Vertrauensnetzes zu helfen, aber gut ...


17

Asirra ist das entzückendste Captcha aller Zeiten.


Zuerst las ich es als "Asirra ist das am besten geeignete Captcha aller Zeiten." das warf mich leicht ab. Ich bin damit einverstanden, dass es wahrscheinlich das bezauberndste ist, aber genau wie es auf der Website heißt, könnte ein Bot-Autor einfach alle Bilder speichern (es könnte eine Weile dauern), sie klassifizieren, dann würde der Bot es leicht brechen.
Dalin Seivewright

7
Wie kann ein Blinder diese beantworten?
BBetances

es ist fast das gleiche wie reCAPTCHA. Wir suchen nach einem weniger irritierenden und nicht bildbasierten Ansatz.
AhmetB - Google

Ich muss sagen, dass sie eine große Anzahl von Bildern verwenden, um ihre Demo zu überprüfen.
Pimvdb

1
Ich hatte 3 Versuche, bevor es zugab, dass ich ein Mensch bin - vermutlich, weil einige der Bilder nur wie große Fellknäuel aussahen.
Kramii

16

Lassen Sie den Benutzer einfach einfache arithmetische Ausdrücke lösen:

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

usw.

Sobald sich Spammer durchgesetzt haben, sollte es ziemlich einfach sein, sie zu erkennen. Wenn ein erkannter Spammer dies anfordert, wechseln Sie zwischen den folgenden beiden Befehlen:

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

Der Grund, warum dies funktioniert, ist offensichtlich, dass alle Spammer klug genug sind eval, um das Captcha in einer Codezeile zu lösen.


1
Auch +1 für Grausamkeit, aber ich wollte nur hinzufügen, dass dies bei mir nicht funktionieren würde. Ich verwende den VB.NET-Evaluierungsanbieter und suche nach Format c: oder rm -rf, Zeilenumbrüchen, Doppelpunkten, Semikolons usw. Sie benötigen ein bisschen erfinderischer sein. Außerdem lasse ich Linux-Skripte nie als Root laufen, weshalb dies auch nicht funktioniert.
Stefan Steiger

@ Longpoke Es wird einfach nicht funktionieren. Bei den meisten modernen Unixen ist ein Schutz rmgegen das Laufen mit eingebaut-rf / .
Hamstergen

lol es wäre lustig, wenn du das nur sagst, damit ich es versuche. Vielleicht würde rm -rf / * stattdessen funktionieren. Wie auch immer, es gibt viele andere schlechte Dinge, die Sie tun können.
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

Dies setzt auch voraus, dass die Leute nichts über Pythons wissen literal_eval (oder Äquivalente in anderen Sprachen) , was eine ziemlich traurige Tatsache ist.
Petr Viktorin

rm -rf ~wäre destruktiv, wenn das Skript auf einer persönlichen Maschine ausgeführt wird
kirb

16

Ich habe die folgende einfache Technik verwendet, sie ist nicht kinderleicht. Wenn jemand dies wirklich umgehen möchte, ist es einfach, sich die Quelle anzusehen (dh nicht für Google CAPTCHA geeignet), aber es sollte die meisten Bots täuschen.

Fügen Sie zwei oder mehr Formularfelder wie folgt hinzu:

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

Verwenden Sie dann CSS, um sie auszublenden:

.hideme {
    display: none;
}

Überprüfen Sie beim Senden, ob diese Formularfelder Daten enthalten, wenn sie den Formularbeitrag nicht bestehen. Der Grund dafür ist, dass Bots den HTML-Code lesen und versuchen, jedes Formularfeld auszufüllen, während Menschen die Eingabefelder nicht sehen und in Ruhe lassen.

Es gibt natürlich noch viel mehr Dinge, die Sie tun können, um dies weniger ausnutzbar zu machen, aber dies ist nur ein Grundkonzept.



15

Obwohl wir alle sollten grundlegende Mathematik kennen, könnte das Mathe - Puzzle zu Verwirrung führen. In Ihrem Beispiel würden sicher einige Leute mit "8" anstelle von "1" antworten.

Wäre eine einfache Textfolge mit zufälligen, fett oder kursiv hervorgehobenen Zeichen geeignet? Der Benutzer muss nur die fett / kursiven Buchstaben als CAPTCHA eingeben.

ZB s sdfa t werwe a jh c traurig k oghvefdhrffghlfgdhowfgh

In diesem Fall wäre "Stapel" das CAPTCHA. Es gibt offensichtlich zahlreiche Variationen dieser Idee.

Bearbeiten: Beispielvarianten, um einige der potenziellen Probleme zu beheben, die mit dieser Idee identifiziert wurden:

  • Verwenden Sie zufällig gefärbte Buchstaben anstelle von Fett / Kursiv.
  • Verwenden jedes zweiten roten Buchstabens für das CAPTCHA (verringert die Möglichkeit, dass Bots unterschiedlich formatierte Buchstaben identifizieren, um das CAPTCHA zu erraten)

1
Ich mag dieses - zum Beispiel "Bitte geben Sie das Wort ein, das durch den dritten unterstrichenen roten Buchstaben, den vierten fetten grünen Buchstaben und den fünften nicht fetten blauen Buchstaben geschrieben wird".
Andrew

9
Das obige Beispiel 'ssdfatwerweajhcsadkoghvefdhrffghlfgdhowfgh' könnte durch einen einfachen regulären Ausdruck gelöst werden
alex

Dies wäre nicht gut für Benutzer mit Acalcula. Es gibt Wissenschaftler mit diesem Leiden, daher ist es nicht unangemessen, dass es Programmierer gibt.
BobbyShaftoe

Exzellente Idee! Vielleicht können Sie sogar durch Spielen mit wechselnden Vordergrund- / Hintergrundfarben etwas erhalten, das Text anzeigt, der für Menschen leicht sichtbar ist, aber für Bots zu zufällig ist? Natürlich ist dies für farbenblinde Menschen schwieriger :-(
Shalom Craimer

2
Die Verwendung von Farbe kann die Sache komplizieren, da Sie verschiedene Formen der Farbenblindheit unterstützen müssten. Ansonsten klingt das ziemlich gut.
KarstenF


12

Ich weiß, dass niemand dies lesen wird, aber was ist mit dem Hund oder der Katze CAPTCHA?

Sie müssen sagen, welche Katze oder welcher Hund ist, Maschinen können das nicht. Http://research.microsoft.com/asirra/

Ist cool ..


4
Computer können das nicht. Auch können Blinde nicht.
TRiG

1
Ich auch nicht, wenn ich es auf einem hochauflösenden Monitor betrachte. Diese Bilder sind winzig. Auch einer von ihnen war von einer nicht identifizierbaren Kreatur hinter einem weißen Zaun.
jsims281

10

Ich benutze nur einfache Fragen, die jeder beantworten kann:

Welche Farbe hat der Himmel?
Welche Farbe hat eine Orange?
Welche Farbe hat Gras?

Es macht es so, dass jemand einen Bot auf Ihre Site programmieren muss, was wahrscheinlich die Mühe nicht wert ist. Wenn ja, ändern Sie einfach die Fragen.


Cyc kann dies trivial lösen ... und es ist Open Source. Die Implementierung würde höchstens ein paar Stunden Scripting erfordern.
Rmeador

Dies wird auch vom Ubuntu-Forum verwendet. Ich mag es und die Implementierung von Prüfungen wie "2 + 2 =?" oder "was ist der erste Buchstabe des Alphabets" ist sehr einfach.
Pistacchio

8
Die Antworten: 1) Im Moment hellblau, später rot, dann schwarz mit einem Hauch von Orange in der Nähe der Innenstadt. 2) Orange, es sei denn, es ist schimmelig, dann ist es grün oder schwarz oder weiß. 3) Braun in Südkalifornien, es sei denn, Sie sind in Beverly Hills, dann ist es grün.
mmr

52
@mmr Sehen Sie, das ist eigentlich ein Vorteil des Systems, es hält die Smartasses davon ab, Kommentare zu veröffentlichen ...
tghw

2
Die zweite und dritte Antwort sind voreingenommen gegenüber Menschen, die in Wüsten oder Baltimore leben.
Mike Robinson

10

Ich persönlich mag CAPTCHA nicht, es schadet der Benutzerfreundlichkeit und löst nicht das Sicherheitsproblem, gültige Benutzer ungültig zu machen.

Ich bevorzuge Methoden zur Bot-Erkennung, die Sie serverseitig durchführen können. Da Sie gültige Benutzer haben (dank OpenID), können Sie diejenigen blockieren, die sich nicht "verhalten". Sie müssen lediglich die Muster eines Bots identifizieren und mit den Mustern eines typischen Benutzers abgleichen und die Differenz berechnen.

Davies, N., Mehdi, Q., Gough, N .: Erstellen und Visualisieren eines intelligenten NPC mit Game Engines und AI Tools http://www.comp.glam.ac.uk/ASMTA2005/Proc/pdf/game-06 .pdf

Golle, P., Ducheneaut, N .: Verhindern, dass Bots Online-Spiele spielen <- ACM Portal

Ducheneaut, N., Moore, R .: Die soziale Seite des Spielens: Eine Studie über Interaktionsmuster in einem Massively Multiplayer Online Game

Sicher, die meisten dieser Referenzen verweisen auf die Erkennung von Videospiel-Bots, aber das war das Thema unserer Gruppe mit dem Titel Robot Wars: Eine Erkundung der Roboteridentifikation im Spiel . Es wurde nicht veröffentlicht oder so, nur etwas für ein Schulprojekt. Ich kann eine E-Mail senden, wenn Sie interessiert sind. Tatsache ist jedoch, dass Sie es, selbst wenn es auf der Erkennung von Videospiel-Bot basiert, auf das Web verallgemeinern können, da ein Benutzer an Nutzungsmuster gebunden ist.

Ich stimme der Methode von MusiGenesis für diesen Ansatz zu, da sie auf meiner Website verwendet wird und anständig gut funktioniert. Der unsichtbare CAPTCHA-Prozess ist eine anständige Methode, um die meisten Skripte zu blockieren. Dies hindert einen Skriptschreiber jedoch immer noch nicht daran, Ihre Methode rückzuentwickeln und die gesuchten Werte in Javascript zu "fälschen".

Ich werde sagen, die beste Methode ist, 1) einen Benutzer einzurichten, damit Sie blockieren können, wenn er schlecht ist, 2) einen Algorithmus zu identifizieren, der typische Muster im Vergleich zu nicht typischen Mustern der Website-Nutzung erkennt, und 3) diesen Benutzer entsprechend zu blockieren.


Warum kann ein Bot keine OpenIDs registrieren? Ein Angreifer muss lediglich einen eigenen OpenID-Publisher erstellen.
rjmunro

Ja @rjmunro, und das ist gut so. Die Schwierigkeit des Internets besteht in der Identifizierung anonymer Benutzer. Wenn ein Bot eine OpenID registriert und Sie diesen OpenID-Benutzer als Bot identifizieren, können Sie ihn herunterfahren. Es ist nicht mehr anonym. Das verhindert nicht mehrere Registrierungen durch denselben Anbieter, aber dann können Sie diesen Anbieter schließen, um Bots zuzulassen. Ziel ist es, die Anonymität des Internets so gut wie möglich zu beseitigen.
Jwendl

10

Ich habe einige Ideen, die ich gerne mit Ihnen teilen möchte ...

Erste Idee, OCR zu vermeiden

Ein Captcha, das einen verborgenen Teil für den Benutzer hat, aber das vollständige Bild besteht aus den beiden Codes zusammen. Daher lesen OCR-Programme und Captcha-Farmen das Bild, das den sichtbaren und den verborgenen Teil enthält, versuchen, beide zu dekodieren, und senden sie nicht. .. - Ich habe alle bereit, das zu beheben und online zu arbeiten.

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

Zweite Idee, um es einfacher zu machen

Eine Seite mit vielen Wörtern, die der Mensch auswählen muss. Ich habe auch dieses erstellt, ist einfach. Die Wörter sind erkennbare Bilder, und der Benutzer muss auf das richtige klicken.

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

Dritte Idee ohne Bilder

Das gleiche wie zuvor, jedoch mit Divs und Texten oder kleinen Symbolen. Der Benutzer darf nur auf das richtige Div / Letter / Bild klicken.

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

Letzte Idee - ich nenne es CicleCaptcha

Und noch eine meiner CicleCaptcha , der Benutzer muss einen Punkt auf einem Bild finden. Wenn er es findet und darauf klickt, dann ist es eine Person, Maschinen fallen wahrscheinlich aus oder müssen neue Software erstellen, um einen Weg mit dieser zu finden.

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

Kritiker sind willkommen.


Re-Captcha hat Text zu Sprache für seine Wörter. Es könnte Ihnen sagen, wo Sie klicken müssen.
Robert P

@RobertP Das Klicken bei Sehbehinderung entspricht dem Schießen bei Sehbehinderung ... "Nur auf den Kopf zielen".

8
@pst "Ein bisschen nach links. Das ist richtig, ein bisschen mehr. Gut. Gut. Jetzt zurück. Auf. Nein, auf dem anderen Weg. Ja, du hast es. Nur ein bisschen mehr. Ja. Nur ein bisschen mehr. Fast da. Fast da ... fast ... fast ... CAPTCHA !!! "
Robert P


7

Vor kurzem habe ich begonnen, ein Tag hinzuzufügen, dessen Name und ID auf "Nachricht" gesetzt sind. Ich habe es mit CSS ausgeblendet (Anzeige: keine). Spam-Bots sehen es, füllen es aus und senden das Formular ab. Serverseitig markiere ich den Beitrag als Spam, wenn der Textbereich mit dem ID-Namen ausgefüllt ist.

Eine andere Technik, an der ich arbeite, generiert zufällig Namen und IDs, wobei einige Spam-Prüfungen und andere reguläre Felder sind.

Dies funktioniert sehr gut für mich und ich habe noch keinen erfolgreichen Spam erhalten. Ich bekomme jedoch weit weniger Besucher auf meine Seiten :)


Die Verwendung von CSS zum Ausblenden des Formularfelds und die Bestätigung, dass es leer ist, hat auch bei mir funktioniert. Nicht narrensicher, aber eine gute Option.
Chris

Technik 1: Honeypot
Kevinji

6

Sehr einfache Arithmetik ist gut. Blinde können antworten. (Aber wie Jarod sagte, hüte dich vor dem Vorrang des Operators.) Ich nehme an, jemand könnte einen Parser schreiben, aber das macht das Spammen teurer.

Ausreichend einfach, und es wird nicht schwierig sein, darum herum zu codieren. Ich sehe hier zwei Bedrohungen:

  1. zufällige Spambots und die menschlichen Spambots, die sie unterstützen könnten; und
  2. Bots, die für das Spiel Stack Overflow erstellt wurden

Mit einfacher Arithmetik können Sie Bedrohung Nr. 1, aber nicht Bedrohung Nr. 2 abwehren.


Ein Parser ist vermutlich wesentlich einfacher als das Schreiben eines Bild-Captcha-Crackers. Denken Sie daran, das Einfachste, was Sie Benutzern anbieten, ist, was ein Spambot wahrscheinlich verwenden wird. Leider muss das No-JS-Captcha schwieriger sein.
Stalepretzel

5

Was wäre, wenn Sie eine Kombination der Captcha-Ideen verwenden würden, die Sie hatten (wählen Sie eine davon aus - oder wählen Sie eine davon zufällig aus):

  • ASCII-Text captcha: // (_) //
  • Mathe-Rätsel: Was ist 7 minus 3 mal 2?
  • Wissenswertes: Was schmeckt besser, eine Kröte oder ein Eis am Stiel?

mit dem Zusatz, genau das gleiche Captcha in einem versteckten CSS-Bereich der Seite zu platzieren - die Honeypot-Idee. Auf diese Weise hätten Sie einen Ort, an dem Sie die richtige Antwort erwarten würden, und einen anderen, an dem die Antwort unverändert bleiben sollte.


1
"Was besser schmeckt" ist meiner Meinung nach ziemlich subjektiv. Menschen, die geschmacklich auf die Nerven gehen, werden als Bot interpretiert. Darüber hinaus beträgt die Chance, als Bot zu bestehen, mit nur zwei Antworten 50%.
Pimvdb

Wahrlich im subjektiven Teil, aber das Besondere war von der ursprünglichen Frage. Mein Punkt war, alle drei (oder mehrere) Typen zufällig zu verwenden. Außerdem beträgt die Chance zu bestehen nur 50%, wenn die Antwort Multiple-Choice ist. Wenn der Benutzer das Wort eingibt, ohne die möglichen Antworten in einer Liste anzugeben, wird es für einen Bot viel schwieriger, die richtigen Wörter in der Frage / Antwort auszuwählen.
TheEmirOfGroofunkistan

5

Ich habe erstaunlich gute Ergebnisse mit einem einfachen Feld "Lassen Sie dieses Feld leer:" erzielt. Bots scheinen alles auszufüllen, besonders wenn Sie das Feld so etwas wie "URL" nennen. In Kombination mit einer strengen Überprüfung der Überweiser habe ich noch keinen Bot dazu gebracht, daran vorbeizukommen.

Bitte vergessen Sie hier nicht die Zugänglichkeit. Captchas sind für viele Benutzer von Bildschirmleseprogrammen notorisch unbrauchbar. Einfache mathematische Probleme oder sehr triviale Trivia (ich mochte die Frage "Welche Farbe hat der Himmel?") Sind für Benutzer mit Sehbehinderung viel freundlicher.


5

Einfacher Text klingt großartig. Bestechen Sie die Community, um die Arbeit zu erledigen! Wenn Sie wie ich der Meinung sind, dass SO-Wiederholungspunkte das Engagement eines Benutzers für den Erfolg der Website messen, ist es völlig vernünftig, Reputationspunkte anzubieten, um die Website vor Spammern zu schützen.

Bieten Sie +10 Reputation für jeden Beitrag einer einfachen Frage und einer Reihe korrekter Antworten. Die Frage sollte angemessen weit von allen vorhandenen Fragen entfernt sein (Bearbeitungsabstand), und der Ruf (und die Frage) sollten allmählich verschwinden, wenn die Leute sie nicht beantworten können. Angenommen, die Fehlerquote bei korrekten Antworten beträgt mehr als 20%, dann verliert der Übermittler einen Reputationspunkt pro falscher Antwort, maximal jedoch 15. Wenn Sie also eine schlechte Frage einreichen, erhalten Sie jetzt +10, aber irgendwann werden Sie es tun netto -5. Oder vielleicht ist es sinnvoll, eine Stichprobe von Benutzern zu fragen, ob die Captcha-Frage eine gute ist.

Nehmen wir an, wie bei der täglichen Wiederholungsobergrenze kann kein Benutzer mehr als 100 Reputationen verdienen, indem er Captcha-Fragen stellt. Dies ist eine vernünftige Einschränkung des Gewichts, das solchen Beiträgen beigemessen wird, und kann auch dazu beitragen, zu verhindern, dass Spammer Fragen in das System einbringen. Sie können beispielsweise Fragen nicht mit gleicher Wahrscheinlichkeit, sondern mit einer Wahrscheinlichkeit auswählen, die proportional zum Ruf des Einreichers ist. Jon Skeet, bitte keine Fragen stellen :-)


5

Führen Sie eine AJAX-Abfrage für eine kryptografische Nonce an den Server durch. Der Server sendet eine JSON-Antwort zurück, die das Nonce enthält, und setzt außerdem ein Cookie, das den Nonce-Wert enthält. Berechnen Sie den SHA1-Hash der Nonce in JavaScript und kopieren Sie den Wert in ein verstecktes Feld. Wenn der Benutzer das Formular veröffentlicht, sendet er das Cookie jetzt mit dem Nonce-Wert zurück. Berechnen Sie den SHA1-Hash des Nonce aus dem Cookie, vergleichen Sie ihn mit dem Wert im ausgeblendeten Feld und stellen Sie sicher, dass Sie diesen Nonce in den letzten 15 Minuten generiert haben (memcached ist dafür gut). Wenn alle diese Prüfungen bestanden sind, posten Sie den Kommentar.

Diese Technik erfordert, dass sich der Spammer hinsetzt und herausfindet, was los ist. Sobald dies der Fall ist, muss er immer noch mehrere Anforderungen auslösen und den Cookie-Status beibehalten, um einen Kommentar zu erhalten. Außerdem sehen sie den Set-CookieHeader immer nur, wenn sie das JavaScript analysieren und ausführen und die AJAX-Anforderung stellen. Dies ist weitaus mehr Arbeit, als die meisten Spammer bereit sind, zumal die Arbeit nur für eine einzelne Site gilt. Der größte Nachteil ist, dass jeder mit deaktiviertem JavaScript oder deaktivierten Cookies als potenzieller Spam markiert wird. Das bedeutet, dass Moderationswarteschlangen immer noch eine gute Idee sind.

Theoretisch könnte dies als Sicherheit durch Dunkelheit gelten, in der Praxis ist es jedoch ausgezeichnet.

Ich habe noch nie einen Spammer gesehen, der sich die Mühe gemacht hat, diese Technik zu brechen, obwohl ich vielleicht alle paar Monate einen themenbezogenen Spam-Eintrag von Hand bekomme, und das ist ein bisschen unheimlich.


5

1) Menschliche Löser

Alle hier genannten Lösungen werden durch den Ansatz menschlicher Löser umgangen. Ein professioneller Spambot hält Hunderte von Verbindungen aufrecht und wenn er CAPTCHA nicht selbst lösen kann, gibt er den Screenshot an entfernte menschliche Löser weiter.

Ich habe häufig gelesen, dass menschliche Löser von CAPTCHAs gegen die Gesetze verstoßen. Nun, dies wird von denen geschrieben, die nicht wissen, wie diese (Spam-) Branche funktioniert.
Menschliche Löser interagieren nicht direkt mit Stellen, die sie mit CAPTCHAs lösen. Sie wissen sogar nicht, von welchen Standorten CAPTCHAs genommen und gesendet wurden. Mir sind Dutzende (wenn nicht Hunderte) Unternehmen oder / und Websites bekannt, die Human-Solver-Dienste anbieten, aber keine einzige für die direkte Interaktion mit defekten Boards.
Letztere verstoßen nicht gegen Gesetze, so dass das Lösen von CAPTCHA völlig legale (und offiziell registrierte) Unternehmen sind. Sie haben keine kriminellen Absichten und könnten beispielsweise für Ferntests, Untersuchungen, Konzeptprüfungen, Prototypen usw. verwendet worden sein.

2) Kontextbasierter Spam

KI-Bots (Artificial Intelligent) bestimmen Kontexte und führen zu unterschiedlichen Zeiten kontextsensitive Dialoge von verschiedenen IP-Adressen (verschiedener Länder) aus. Selbst die Autoren von Blogs verstehen häufig nicht, dass Kommentare von Bots stammen. Ich werde nicht auf viele Details eingehen, aber Bots können beispielsweise menschliche Dialoge weben, sie in einer Datenbank speichern und sie dann einfach wiederverwenden (Satz für Satz), sodass sie von Software oder sogar von Menschen nicht als Spam erkannt werden können.

Die am häufigsten gewählte Antwort lautet:

  • * "Die Theorie lautet:
    • Ein Spam-Bot unterstützt kein JavaScript und sendet das, was er sieht
    • Wenn der Bot JavaScript unterstützt, sendet er das Formular sofort
    • Der Kommentator hat zumindest einen Teil der Seite gelesen, bevor er "*

Auch die Honeypot-Antwort und die meisten Antworten in diesem Thread sind einfach falsch.
Ich gehe davon aus, dass es sich um zum Scheitern verurteilte Ansätze handelt

Die meisten Spambots arbeiten mit lokalen und Remote-Javascript-fähigen (gepatchten und verwalteten) Browsern aus verschiedenen IPs (verschiedener Länder) und sind ziemlich clever, um Honigfallen und Honigtöpfe zu umgehen.

Das andere Problem ist, dass selbst Blog-Besitzer nicht häufig erkennen können, dass Kommentare von Bot stammen, da sie tatsächlich aus menschlichen Dialogen und Kommentaren stammen, die von anderen Web-Boards (Foren, Blog-Kommentaren usw.) stammen.

3) Konzeptionell neuer Ansatz

Entschuldigung, ich habe diesen Teil als gefällten entfernt


1
Sie haben das Problem mit fast jeder Antwort in diesem Thread umrissen. Sie alle wären schnell besiegt, wenn sie nicht nur auf winzigen Websites zu finden wären. Wenn eine von ihnen auf einer großen Website oder einer Reihe kleiner Websites (z. B. als Wordpress-Plugin) verwendet würde, wären sie an einem Tag besiegt. Sie sind wirklich keine CAPTCHAS, sondern glückliche Fälle von Sicherheit durch Dunkelheit. Sie haben auch Recht; Moderner Spam enthält Kommentare, die selbst ich nicht als Spam erkennen kann. Ich habe CAPTCHA aufgegeben und benutze stattdessen Mollom. Crowdsourcing-Spam ist imho ein besserer Ansatz.
Dan

5

Eigentlich könnte es eine Idee sein, ein programmierbezogenes Captcha-Set zu haben. Zum Beispiel:

Captcha

Es besteht die Möglichkeit, dass jemand einen Syntaxprüfer erstellt, um dies zu umgehen, aber es ist viel mehr Arbeit, ein Captcha zu umgehen. Sie haben jedoch die Idee, ein verwandtes Captcha zu haben.


5
Außer: Würdest du wissen, dass die Antwort auf die Beispielfrage (falls jemand später darüber stolpert und das Bild nicht da ist: "Wie viele PHP-Syntaxfehler in $var == array(1 = 'one');;") 1nicht ist 3? (Ernsthaft. Versuchen Sie es $var == array(1 => 'one');;) ^ _ ~
pinkgothic

Heh, es ist lange genug her, dass ich mich nicht daran erinnere, dieses Bild gemacht zu haben. Sie haben natürlich Recht, und ich denke nicht, dass dies als Captcha sehr gut wäre - aber vielleicht als Zugangsvoraussetzung für ein Programmierforum.
Ross

4

Ich muss zugeben, dass ich keine Erfahrung im Kampf gegen Spambots habe und nicht wirklich weiß, wie hoch entwickelt sie sind. Trotzdem sehe ich im jQuery-Artikel nichts, was nur auf dem Server erreicht werden könnte.

So formulieren Sie die Zusammenfassung aus dem jQuery-Artikel neu:

  1. Beim Generieren des Kontaktformulars auf dem Server ...
  2. Holen Sie sich die aktuelle Zeit.
  3. Kombinieren Sie diesen Zeitstempel und ein geheimes Wort, generieren Sie einen 32-stelligen "Hash" und speichern Sie ihn als Cookie im Browser des Besuchers.
  4. Speichern Sie den Hash- oder Token-Zeitstempel in einem versteckten Formular-Tag.
  5. Wenn das Formular zurückgesendet wird, wird der Wert des Zeitstempels mit dem im Cookie gespeicherten 32-Zeichen-Token verglichen.
  6. Wenn die Informationen nicht übereinstimmen oder fehlen oder wenn der Zeitstempel zu alt ist, beenden Sie die Ausführung der Anforderung ...

Eine andere Option, wenn Sie das herkömmliche Image CAPTCHA verwenden möchten, ohne den Aufwand, sie bei jeder Anforderung zu generieren, besteht darin, sie offline vorab zu generieren. Dann müssen Sie nur zufällig eine auswählen, die mit jedem Formular angezeigt werden soll.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.