Barrierefreie CAPTCHAs (2/2)
Kategorie HTML & CSS
Datum: 13.05.2008, 20:33 - Autor: Manko10
Da ich im Web immer wieder das Bedürfnis nach konventionellen CAPTCHAs vernehme, um Spam zu vermeiden, habe ich mich entschlossen, dieses Tutorial noch zu erweitern. Immerhin ist das sog. Honey-Feld noch längst nicht alles.Was also sollte man noch unternehmen, damit grafische CAPTCHAs wirklich der Vergangenheit angehören?
Um diese Frage zu beantworten betreiben wir ein wenig Bot-Psychologie.
Was will ein Bot erreichen und wie erreicht er das?
Ein Bot will zunächst einmal Formulare vollspammen, das ist vollkommen klar. Aber es geht noch genauer.
Zum Beispiel wollen Bots die Seitenbesucher dazu bringen, auf von ihnen gepostete Links zu klicken, die meist zu irgendwelchen Phishing-Seiten führen.
Damit haben wir auch gleich den Punkt 1:
Punkt 1: Bots posten Links
Links kann man schon von vornherin herausfiltern. Enthält ein Beitrag Links, so wird er nicht angenommen. Doch was ist, wenn User durchaus Links posten dürfen? Dann zählt man eben die Links in dem Post. Mehr als vier Links in einem Beitrag von 400 Zeichen ist wohl weniger von einem User als viel mehr von einem Bot.Vergleicht man also die Länge des Beitrags mit der Anzahl der Links, so kann man Bots ziemlich sicher herausfiltern.
Gehen wir weiter. Was wissen Bots über deine Anwendung? Handelt es sich um eine bekannte Software oder ist es eine selbstprogrammierte Anwendung?
Im letzten Falle hast du eine weitere Methode, mit der du Bots filtern kannst.
Punkt 2: Bots sind dumm
Bots wissen in der Regel relativ wenig über deine Seite und wissen deshalb auch nicht, wie sie die Links am besten auszeichnen. Deshalb versuchen sie es meist gleich auf mehrere Arten.Zum Beispiel so:
| Code: | ||
|---|---|---|
|
Fazit: findest du mehrere gleiche oder ähnliche Links, die auf verschiedene Arten versucht wurden, auszuzeichnen, so kannst du mit ziemlicher Sicherheit auf Bots schließen.
Aber ganz so dumm sind Bots nun auch nicht. Immerhin wollen sie nicht, dass sie sofort erkannt werden.
Punkt 3: Bots wollen unerkannt bleiben
Oft versuchen Bots auch, solche Filterungen zu umgehen und verschleiern ihre Postings.So könnten sie z.B. viele Leerzeichen einfügen.
| Code: | ||
|---|---|---|
|
Aber es geht auch ein wenig raffinierter. Man kann den ganzen Mist auch hexadezimal kodieren.
Obiger URL sähe dann so aus:
| Code: | ||
|---|---|---|
|
Es hilft also nicht, nur nach dem String "http://" Ausschau zu halten, sondern auch nach übermäßig vielen Hexadezimal-Kodierungen. Kein User würde sich die Mühe machen, seine Links zu kodieren.
Gehen wir zum nächsten Punkt.
Was machen Bots noch? Na klar, sie bieten gewisse Produkte für Manneskraft und Verlängerungen bestimmter Körperteile in Form kleiner Pillen an.
Oder etwas neutraler: kostenlose Softwaredownloads.
Punkt 4: Bots preisen gewisse Produkte an
Dies ist der einfachste und zumeist auch wirkungsvollste Teil. Ein Spam-Wortfilter ist eigentlich unerlässlich. Von pharmazeutischen Produkten in verschiedensten Schreibweisen bis hin zu free software downloads ist im Grunde alles dabei. Sei hier kreativ.Am besten du blätterst auch deine Spam-Mails durch (aber bitte nur bei deaktiviertem HTML
) und schaust nach, was dir da so angeboten wird.Die häufigsten Ausdrücke steckst du dann in einen Spam-Wortfilter. Der Erfolg ist verblüffend.
Aber es gibt noch mehr. Eine Eigenschaft, die Bots haben und die User nicht haben, ist die, dass sie Computerprogramme sind und somit in der Regel schneller beim Tippen, als Menschen.
Also der nächste Punkt:
Punkt 5: Bots haben es eilig
Ein Mensch benötigt je nach Größe des Formulars eine bestimmte Zeit. Gönne ihm die und schreibe auch Bots vor, dass sie sich daran halten müssen. Es wird bestimmt kein User auf die Idee kommen, in 10-20 Sekunden seinen Post mehrmals abzusenden. Bei Kommentarfunktionen kann es sogar noch mehr Zeit sein.Ebenfalls empfehlenswert ist die Prüfung auf doppelte Posts. Wird (unabhängig vom Zeitraum) ein bereits bestehender Post erneut gesendet, so ist dies entweder ein Fehler des Users (wollte er bestimmt nicht) oder du hast wieder ein Maschinchen mehr auf deiner Seite.
Zum Schluss gibt es noch einen sehr wichtigen Punkt, den du mit in deine Spamabwehr aufnehmen solltest.
Bots wissen zumeist nicht, wofür dieses und jenes Feld dient und füllen es nach Gutdünken aus (evtl. abhängig vom Namen des Feldes).
Somit haben wir die für dieses Tutorial letzte Spam-Abwehrmethode entdeckt, die übrigens - wie der Spam-Wort-Filter - eine der wirksamsten ist.
Punkt 6: Bots wissen nicht, was sie tun
Ein User ist intelligent, ein Bot nicht. Ein User weiß in der Regel, was man von ihm erwartet, ein Bot nur beschränkt. Wenn ein Feld so auffällig benannt wurde, wie email_address oder first_name, dann wird er es mit Sicherheit sinnvoll ausfüllen.Aber wie ist es mit einer kryptischen Bezeichnung? Hier weiß der Bot nicht mehr, was er einfügen soll (oder ob er überhaupt etwas einfügen soll).
und genau hier kannst du ansetzen. Prüfe jedes Feld auf sinnvolle Werte. Kein Mensch hat Sonderzeichen und Zahlen geschweige denn Links in seinem Vor- oder Zunamen. Auch ein 250-jähriger User ist wohl eher selten auf deiner Seite unterwegs. Wie sieht es aus mit dem Wohnort? Kennst du jemanden, dessen Ortsname ein @ beinhaltet?
Die Inhalte sind letztendlich immer das, was einen Bot verrät.
An dieser Stelle höre ich auf. Dir fällt sicherlich noch mehr ein, wie man Bots austricksen kann (aber dabei immer schön barrierefrei bleiben!
).Dieser Artikel (und auch der sehr empfehlenswerte Artikel von Ingo Turski zum selben Thema) sind natürlich nicht zum direkten Übernehmen gedacht, sondern zum Anregen, selbst zu denken. Es gibt noch viel mehr Möglichkeiten, Bots auszusperren und je vielfältiger die Ansätze, desto schwerer haben es die Bots. Und das ganz ohne CAPTCHAs.
In dem Sinne: auf ein CAPTCHA- und barrierearmes Web!
21 Kommentare:
Ähm wie ?
Datum: 20.03.2008, 23:25 - Autor: Gast
also ich habe clanbook von php einfach.de und habe von php schreiben nullahnung habe gerade nach anleitung installiert undnun 3000 spam einträge!ui ging dass schnell kannst du mir bitte sagen wie undmi t was ich deinen tipp verwirklichen kann? bitteu man twort per e-mail sid@verkotzt.de Dankeim VorrausSuper
Datum: 16.04.2008, 12:38 - Autor: Gast
Wirklich eine Geniale Idee, ich werde ab jetzt diese Methode probieren ? fals erfolg werde ich nochmal vorbei schauen !danke !
E,K
Danke für den Kommentar
Datum: 16.04.2008, 13:39 - Autor: Manko10
Hallo,du kannst ja mal eine Bot-Log aufstellen. Jedesmal, wenn ein Bot in die Falle tappt, wird das in einer Log festgehalten. Du wirst erstaunt sein, wie viele Bots sich da ansammeln.
Liebe Grüße
Manko10
Auf die Idee gebracht
Datum: 11.05.2008, 23:27 - Autor: Gast
Hallo,durch diesen genialen Beitrag hier, kam auf die Idee, einfach mal das Alter, welches man bei mir im Gästebuch auch angeben kann, auf sinnvolle Werte zu prüfen. Die Bots haben das Feld immer gefüllt, mit dreistelligen Altersangaben ohne Sinn und Verstand. Eine Abfrage auf maximal 100 hat da ratz fatz für erheblich mehr Ruhe gesorgt ;-)
LG
Micha
Datum: 12.05.2008, 17:13 - Autor: Manko10
Hallo Micha,ja, solche Methoden helfen erheblich.
Sinnvoll ist es auch, auf bekannte Spam-Wörter zu prüfen (ich kann sie jetzt hier nicht schreiben, sonst würde ich den Kommentar nicht senden können - aber du weißt schon: kleine Pillen für Manneskraft, kostenlose Softwaredownloads usw.) und ggf. den Eintrag zu verweigern. Auch das Prüfen auf übermäßig viele Links in Textareas kann manchmal Wunder bewirken.
Liebe Grüße
Manko10
klasse sache
Datum: 26.05.2008, 11:35 - Autor: Gast
das ist wirklich mal eine schöne idee, werde das so realisieren und die verhassten captcha-abfragen rauslassen.danke für diese tolle anregung
lg
jan
andere lösung
Datum: 03.06.2008, 13:37 - Autor: Gast
ichfahre sehr gut mit einer logischen abfrage. Hab eine Seite für unsere 2. Seniorenmanschaft erstellt und als Spamschutz die Frage: Die seite welcher Manschaft ist das (Zahl)? nun braucht der nutzer nur noch eine 2 eintragen. seid dem hatte ich nie wieder nen Bot im GästebuchDatum: 03.06.2008, 13:45 - Autor: Manko10
Hallo,die Lösung ist allemal besser, als grafische Captchas, da ein Screenreader die Frage vorlesen kann. Sie ist sogar besser, als die häufig verwendete Lösung einer Rechenaufgabe.
Das Problem ist nur, dass der User weiterhin eine Sicherheitsmaßnahme präsentiert bekommt. In Teil 1und Teil 2 dieses Tutorials geht es ja nicht nur darum, grafische Captchas abzuschaffen, sondern auch darum, wie man es schafft, Spamschutzmethoden zu entwickeln, von denen der User in der Regel nichts mitbekommt.
Aber vielen Dank für deine Ergänzung
Manko10
Datum: 21.06.2008, 20:44 - Autor: Manko10
Hallo koellmania,vielen Dank für das Kompliment.
Zu deiner Frage: wie soll das schon aussehen? Du erstellst per Zufallsalgorithmus verschiedene Zahlen. Diese addierst du und speicherst das Ergebnis.
Dem User präsentierst du dann die einzelnen Zahlen, die er zusammenrechnen muss. Seine Rechnung kannst du dann mit dem gespeicherten Ergebnis vergleichen.
Die andere Variante mit der Frage "Die Seite welcher Mannschaft ist das (Zahl)?" hat den entscheidenden Nachteil, dass sie nur solange funktioniert, wie die Seite unbekannt ist. Immerhin muss immer dasselbe Ergebnis eingefügt werden. Es ist also ziemlich leicht, einen Bot auf dieses Formular zu spezialisieren.
Aber wie schon geschrieben: Teil 1 und Teil 2 dieses Tutorials sind dafür gedacht, grafische CAPTCHAs, aber auch andere "Nervabfragen" zu vermeiden.
Du musst immer bedenken: Logik-Abfragen sind zwar nicht so schlimm, wie grafische CAPTCHAs, nerven aber dennoch und sind auch nicht unbedingt barrierefrei (es ist nicht unbedingt jeder in der Lage, Rechnungen im Kopf durchzuführen).
Genial!
Datum: 24.10.2008, 10:36 - Autor: Jens
Hallo allerseits,ich habe dein "Tuturial" auf mein GB angewandt und heute wurden schon keine Spam-Einträge mehr verzeichnet.
Ein kleines Problem hatte ich mit:
input#email_address, label[for="email_address"] {
display:none;
}
Hier wird das Label trotzdem angezeigt!?
Eine letzte Frage: Ich will ein Bot-Log erstellen. Wie gehe ich das ganze an (Links etc.)?
Danke & Thumbs up!
Datum: 24.10.2008, 10:46 - Autor: Manko10
Hallo,ich kenne jetzt deinen HTML-Code nicht, aber an sich müsste das <label>-Element anhand des for-Attributs erkannt werden. Ansonsten kannst du es auch mit anderen CSS-Selektoren ansteuern und verstecken.
Wenn du eine Bot-Log erstellen willst, kannst du einfach jeden Seitenbesucher zählen, der auf die Falle hereingefallen ist.
Der zweite Teil des Tutorials ist übrigens auch lesenswert, da hier noch einige Methoden zur Spamerkennung erklärt werden, die helfen, wenn einige Bots doch dran vorbeikommen sollten.
Zweischneidig
Datum: 23.12.2008, 14:57 - Autor: Gast
Diese Ansätze sind ja schon ganz nett, sehen aber für mich eher nach einem Wettrüsten zwischen Bot und Botbekämpfung aus, so wie wir es bei Viren und Antivirenprogrammen schon kennen.Es ist ja nun nicht so, dass Bot-Entwickler dumm sind. Klar, die ersten Generationen waren primitiv, aber mit etwas Analyseaufwand, Markup, JS- und CSS-Parsern kann ein etwas fortgeschrittener Bot, die hier beschriebenen Ansätze leicht aushebeln.
Erst recht, wenn es sich nicht um einen generischen Bot sondern um einen Wrapper handelt, der sich an eine bestimmte Seite anpasst oder in der Lage ist, aus Fehlern zu lernen.
Hingegen ist es fast unmöglich, eine OCR Software zu schreiben die ein gut entwickeltes grafisches Captcha knackt. Selbst Pwntcha und ähnliche Seiten, die schon viele Captchas knacken konnten, stehen bei teils einfachen und gut lesbaren Captchas vor argen Problemen.
Nichtsdestotrotz ist der Gedanke, ohne Captchas auszukommen definitiv gut und sollte weiter verfolgt werden. Mein derzeitiger Ansatz ist, Formularelemente serverseitig mit zufälligen kryptischen Benamungen zu erzeugen und möglichst viele Inputfelder eines Typs zu verwenden. Das sorgt dafür, dass der Bot nicht weiß, ob und wo er was ausfüllen soll und dies auch nicht erlernen kann.
Lediglich durch umfangreiches Parsing der Produktivseite könnte er Annahmen treffen, welche Beschreibung (immerhin muss ja für den Besucher sichtbar sein, wo was hin muss) "geografisch" welchem Inputfeld am nächsten kommt. Diesen Vorgang kann man soweit erschweren, dass der Bot gezwungen ist, einen Screen zu machen und diesen zu analysieren, was in keinem Verhältnis zum Ziel eines gewöhnlichen Bots steht, so lange es einfachere "Opfer" gibt.
Viel Erfolg bei der SPAM Bekämpfung!
Datum: 23.12.2008, 15:14 - Autor: Manko10
Hallo, danke für deinen Kommentar!Gar keine Frage, graphische CAPTCHAs sind oft sehr wirksam, aber sie sind eben auch ein wirksamer Schutz gegen User, das ist das Problem.
Natürlich stellt dies eine Art Wettrüsten dar, aber nicht vollkommen. Der erste Teil dieses Tutorials stellt nur die Lösung mit einem Honey-Pott vor, der zweite Maßnahmen zur Filterung von Kommentaren sowie der Analyse des Verhaltens. Die derzeit wirksamste Methode ist meiner Erfahrung nach dem Bot das spammen zu verbieten. Es ist kaum möglich, einem Bot das Absenden eines Formulars zu verbieten, aber man kann dennoch anhand des Inhalts relativ sicher erkennen, ob es ein Bot ist. Mittlerweile sind 18468 Spamkommentare verfasst worden, seit ich den Zähler habe und es ist nur ein einziger durchgekommen, der den Inhalt
„Nice site, guy. Thank you!“
hatte. Dass dies wirklich Spam war, konnte man am relativ sinnlosen Titel erkenne, der ungefähr so lautete: „ASDjdfsaHERdJRDf“. Und mit einem Spamkommentar innerhalb von Monaten, der noch nichteinmal obszönen Kram, geschweige denn Links, beinhaltet, kann ich leben.
Gegen einen Bot, der auf eine Seite spezialisiert ist, kann aber auch mit einem graphischen CAPTCHA relativ wenig ausrichten, hier hilft meist wirklich nur noch ein Filter.
Oder nimm die CAPTCHAs von vBulletin: die gelten als relativ sicher, aber wir Mods bei php.de müssen immer mal wieder Kommentare von Spam-Usern löschen und diese anschließend sperren.
Aber wie immer führen viele Weg nach Rom und so lange sie alle barrierefrei sind, sind sie in Ordnung. Jede neue Idee ist immer willkommen.
| Zitat: |
|---|
| Viel Erfolg bei der SPAM Bekämpfung! |
Datum: 25.02.2009, 11:15 - Autor: Quiety
Ich war gerade auf der Suche nach einem guten Chaptcha, welches ich in meine Seite einbauen konnte, und bin dann durch ein Forum auf deine Seite gestoßen.Ich bin schon seit vielen Jahren PHP-Entwickler, habe schon sehr viele Seiten programmiert, aber auf diese Idee bin ich noch nicht gekommen.
Ich kann mir sehr gut vorstellen, dass das DIE LÖSUNG ist. Ich werde sie sofort bei mir einbauen.
Tja, meist hilft es einfach, zu wissen, wie etwas funktioniert, um etwas sinnvoll dagegen unternehmen zu können. Bravo.
Datum: 27.03.2009, 01:42 - Autor: Manko10
Schön, dass es dir gefällt.
Great Thanks
Datum: 08.10.2009, 23:10 - Autor: Timberwolf
Moin moin,ich wollte mal Danke sagen für das schicke Tutorial
hat auf der Seite dich ich gerade entwickel einiges an arbeit gespart. Danke und ne echt nice idee... vorallem wenn man mal wieder drauf kommt jedes Feld zu prüfen
grüsse Timberwolf
Datum: 09.08.2010, 21:08 - Autor: Nicole
Genial, endlich hab ich etwas gefunden, was nicht schwer und trotzdem wirkungsvoll ist.Schade nur, dass ich nicht selbst testen kann ob es funktioniert, da ja das Feld nicht da ist für den User
Datum: 12.08.2010, 22:14 - Autor: Manko10
Hi,du kannst das Feld ja zum Testen sichtbar machen (entweder die CSS-Regel temporär auskommentieren oder das Feld im Browser selbst per Firebug o.ä. sichtbar machen).
Eindeutige Namen und IDs
Datum: 15.01.2011, 01:48 - Autor: Boris
Ich benutze eindeutige Honignamen wie "email", "name", "website", "info". Nur, dass ich die schön vertausche. Das Feld für den Namen heisst "email" das emalfeld heisst "captcha" usw. Damit versuche ich möglichst falsche Einträge bei den Feldern erzeugen zu lassen. Klar prüfe ich danach ob jemand ein @ im Namen hat oder seine eMail-Adresse kein @ hat.captcha ist SUPER!
Datum: 15.01.2011, 02:01 - Autor: Boris
... noch was. Klasse ist es auch, wenn man ein einfaches Captcha anbietet (und das Feld auch so benennt), aber dann das ganze komplett wie oben beschrieben ausblendet. Danach braucht man nur abfragen ob was eingetragen wurde. Wie oben beschrieben. Es geht darum dem Bot klar zu machen, dass er da unbedingt was eintragen muss.Datum: 24.11.2011, 12:44 - Autor: NZ
Super!Ich bin gerade extrem genervt von zig offensichtlichen Botanmeldungen an meinen Newsletter aber _hasse_ Captchas. Lösung wird noch heute ausprobiert.