Bitte nicht! Bessere Alternativen zu Captchas

Bitte nicht Captchas

(c) doctima

Ihrem Anspruch nach sind Captchas für Menschen entschlüsselbar; SPAM-Bots müssen dagegen weinend aufgeben und gesenkten Hauptes von dannen ziehen. Soweit die Theorie.

Leider haben Captchas eine viel zu hohe false positive-Rate, d. h. zu viele echte Nutzer scheitern an ihnen, und damit sind Captchas für ihren Job schlicht ungeeignet. Außerdem besitzen sie ein enormes Frustrationspotenzial und sind nicht barrierefrei. Deshalb sind sie für eine professionelle Website nicht als lästig, sondern viel eher als geschäftsschädigend einzustufen.

Es geht ohne. Mit wenigen einfachen Maßnahmen bekommt man ähnliche Trefferquoten wie mit Captchas, allerdings ohne die Benutzer zu belästigen. Und das geht beispielsweise so: Wir benötigen Kartoffelsalat, Honig und eine Uhr.

Kartoffelsalat

Bots lesen den Quelltext von Webseiten. Wenn ein Eingabefeld im HTML „E-Mail“ heißt, dann schreiben sie eine E-Mail-Adresse hinein. Das kann man ausnutzen. Der normale Nutzer sieht diese Bezeichnungen nicht. Also nennen wir das E-Mail-Feld anders, z. B. „Schlangengurke“. Das Feld für den Nachnamen nennen wir „Kartoffelsalat“ u. s. w.. Damit ist es für einen SPAM-Bot schon kaum noch lösbar, sinnvolle Werte in die richtigen Felder zu schreiben. Ob z. B. in ein E-Mail-Feld Freitext geschrieben wurde, lässt sich aber leicht per Skript prüfen. Unplausible Bot-Ergüsse werfen wir weg.

Honigtöpfe

Wir verstecken ein Eingabefeld per Stylesheet, sodass der normale Nutzer es weder sieht noch ausfüllen kann. Dieses Feld nennen wir aber im HTML-Quellcode „E-Mail“, und dort steht es, für den Bot gut sichtbar, zwischen dem Kartoffelsalat und der Schlangengurke. So etwas nennt man einen „Honigtopf„. Sobald der Bot das Feld ausfüllt, ist er entlarvt und wir schicken seine Eingaben ins digitale Nirwana.

Digitaluhren

Wie lange dauert es, ein Formular auszufüllen? Bis die ganzen Feldbezeichnungen gelesen und verstanden, die Eingabefelder eingetippt sind, brauchen menschliche Nutzer meist eine ganze Reihe von Sekunden, je nach Umfang des Formulars vielleicht auch Minuten. Einem Bot dauert das zu lange, der muss ja noch ein paar Zehntausend weitere Formulare ausfüllen vor dem Feierabend. Das nutzen wir aus. Wir gucken beim Aufruf der Seite auf die digitale Uhr und zählen. Wird ein mehrseitiges Formular innerhalb weniger Sekunden ausgefüllt und abgeschickt, dann können wir getrost davon ausgehen, dass wir es mit einem Bot zu tun haben und die Eingaben verwerfen.

Funktioniert das?

Wir betreiben das oben Beschriebene seit mehreren Jahren erfolgreich auf eigenen Sites und in Kundenprojekten. Dazu mussten wir die aufgeführten Konzepte nicht einmal selbst ausprogrammieren. Es gibt fertige Module, z. B. die typo3-Extension Spamshield oder das WordPress-Plugin Antispam Bee. Die haben noch ein paar weitere Tricks drauf, die man aber normalerweise nicht unbedingt braucht. Für andere CMS gibt es entsprechende Lösungen.

Fazit

Spiegel online rechnet vor, dass weltweit jeden Tag siebzehn Mannjahre dafür verschwendet werden, Captchas auf Internetseiten zu entschlüsseln. Das ist ziemlich heftig. Captchas sind kein notwendiges Übel. Sie sind übel, soweit korrekt, aber sie sind nicht notwendig. Sie sind, wie Matt Dunn es formuliert, „the Anti-User Experience„, und haben angesichts besserer Alternativen auf professionell erstellten Websites keinerlei Existenzberechtigung.

Nebenbei: Viele Bots lösen die Rätsel gängiger Captcha-Software genauso gut wie der normale Durchschnittsnutzer. Wenn das nicht ausreicht, kann man für ca. einen Dollar pro tausend gelöste Captchas einen menschlichen Knobler engagieren.

9 Gedanken zu „Bitte nicht! Bessere Alternativen zu Captchas

  1. Und was sehen/lesen Screenreader bei dem Kartoffelsalat?
    Man kann sicherlich über CSS und JavaScript den Content ändern. Auch auf HTML-Ebene. Allerdings hat man dort das Problem, dass Screenreader JavaScript und CSS-Anweisungen nur sehr unzuverlässig ausführen.

    Von daher: Alles ok, aber bei dem Punkt würde ich Vorsicht walten lassen.

    • Das ist richtig.
      Nicht zu vergessen: Der label-Text steht auch noch im Quelltext. Und der wird wohl kaum „Kartoffelsalat“ lauten 🙂
      Ich schätze, so blöd sind die Bots nicht, dass sie nur nach der Bezeichnung der Variablen schauen.

  2. Es stimmt schon, Captchas sind lästig und funktionieren nicht immer. Leider werfen die hier genannten Lösungsvorschläge nur neue Probleme auf.
    Soweit ich weiß, benutzen Screenreader zum Teil HTML-Strukturdaten (wie etwa die Namen von Eingabefeldern) als wichtiges Hilfsmittel, da für einen sehbehinderten Nutzer nicht die sichtbaren Eigenschaften einer Seite wichtig sind, sondern die Struktur, der Inhalt und die Funktionalität. Wie xwolfs schon gefragt hat: Was liest der Screenreader also beim Kartoffelsalat? Natürlich kann man Labels vor die Eingabefelder setzen, um vom Lesefluss her die Bedeutung zu erklären, aber dann ist es auch nicht schwer, einen Spambot daran anzupassen. Und wie wird verhindert, dass ein blinder Nutzer mit Screenreader auf einen Honeypot hereinfällt?
    Einige Browser unterstützen mittlerweile das automatische Ausfüllen von häufigen Formularfeldern wie Name, E-Mail-Adresse, Anschrift usw. um dem Nutzer die Zeit zum Eintippen zu ersparen. Das würde bei falsch benannten Eingabefeldern nicht funktionieren. Aber selbst wenn man einen Weg um dieses Problem fände, würde die digitale Stoppuhr die Eingaben verwerfen, weil man (dank der praktischen Hilfsfunktion) zu schnell mit der Registrierung war (soviel zum Frustrationspotenzial). Auch wenn man mit dem Zurück-Button zu einem Formular zurückkehrt, ist dieses meist mit den alten Eingaben vorausgefüllt, wodurch man zu schnell sein könnte, wenn man nur einen Tippfehler ausbessert.
    Browser mit deaktiviertem JavaScript wären von der Benutzung des Formulars überhaupt ausgeschlossen. Abgesehen davon kann eine Uhr als JavaScript-Kontrollmechanismus clientseitig relativ leicht ausgehebelt werden und falls sie am Server mitläuft, muss der Spambot halt ein paar Sekunden warten (während er zeitversetzt tausende andere Formulare absendet).
    Natürlich werden solche ungewöhnlichen Methoden funktionieren, solange sie nur auf wenigen Seiten eingesetzt werden. Für Spambot-Programmierer zahlt es sich dann nicht aus, den Bot darauf anzupassen. Aber sobald viele Internetseiten nach dem Prinzip Bots auszufiltern versuchen, werden die Urheber der Spamprogramme auch Wege finden, dieses System zu knacken. Vermutlich sogar sehr einfach, weil es nicht auf für Computer schwer lösbaren Problemen basiert, sondern nur ein bisschen vom üblichen Formularschema abweicht (Kartoffelsalat) und ein paar Zusatzbedingungen einführt (Honigtöpfe & Digitaluhren).
    Ich sage nicht, dass Captchas besser sind, aber die vorgeschlagenen Alternativen sind auch nicht gerade ideal.

  3. Dass Kartoffelsalat nicht barrierefrei ist, ist denke ich jedem klar. Soweit nehme ich die Einwände entgegen. Aber die Diskussion geht am Kern vorbei: Captchas sind ebenfalls nicht barrierefrei, aber zusätzlich nerven sie ganz furchtbar. Und das soll die eigentliche Botschaft dieses Posts sein.
    Das selbe Argument gilt auch für den Aspekt, dass die angeführten Mechanismen keine absolute Sicherheit gegen Bots bedeuten: Captchas dito, dito.
    Wir bewegen uns hier in dem bekannten running-to-stand-still Schema. Bots und Abwehrmechanismen versuchen sich gegenseitig zu übertrumpfen, und jeder Vorteil der einen Seite wird durch eine Verbesserung der anderen zügig wett gemacht.
    Außerdem stecken wir in der Zwickmühle, dass, wenn etwas für einen Screenreader (Software) entzifferbar ist, es auch für einen Bot (auch Software) kein Problem darstellt.
    Wenn man also sicherer gehen, aber nicht unnötig Leute nerven oder aussperren will, kommt man nicht drum rum, den Turing-Test etwas intelligenter zu gestalten, z.B. mehrstufig, indem man beispielsweise Verdachtsfälle nicht sofort verwirft, sondern Bestätigungsfragen einbaut.
    Über weitere Anregungen oder Best Practices würde ich mich freuen.

  4. Hallo,

    schöner Beitrag! Informativ und gut zu lesen, auch wenn mir das Alles nicht neu ist. Der Beitrag sollte ja auch nur aufzeigen, dass es Alternativen gibt, zumindest so lange, wie die meisten Bots die Aufgabenstellung nicht lösen können. Christoph schrieb: „… aber die vorgeschlagenen Alternativen sind auch nicht gerade ideal.“ – Christoph, was ist schon ideal, und vor Allem: was ist DEINER Meinung nach ideal? Ich bin der Meinung, wenn man derartige Kritik anbringt, sollte man mit einem besseren Vorschlag auffahren können.

    Gruß & weiter so @Edgar,

    John

  5. Hallo!

    Der Blog ist zwar schon ein paar Jahre alt, aber dennoch mal eine „neue“ Möglichkeit. Clean-URLs und Template-System. Die Formulare liegen außerhalb des Document-Root-Verzeichnisses und somit außerhalb des Zugriffsbereichs der Adresszeilen. Es werden aber nicht die Formulare selber geladen, sondern dessen Inhalte dynamisch in die „index.php“. Das Template-System macht daraus eine Template-Datei, z.B. „kontakt.html“. Ein Angreifer wird jetzt versuchen diese Seite auzurufen um automatisiert Paramater zu senden. Da hat er aber Pech, da es diese Seite in Wirklichkeit nicht gibt. Man kann auch der Clean-URL keine Parameter anhängen, da dadurch ein anderer Link entsteht aus dem eine ungültige Anforderung resultiert die mit Fehler 404 quittiert wird. Bei mir gibt es nur eine einzige Datei, die index.php, auf der alle anderen Inhalte aufbauen und als Template im Browsercache abgelegt werden (der Browsercache nützt aber nichts da alle Inhalte immer neu geladen werden).

    Somit kann man den Bots ein Schnippchen schlagen.

    Gruß, René

  6. Doof nur das dies auch jede Benutzerfreundlichkeit von Modernen Browsern mit zerstört! Chrome und Firefox füllen Nutzer Formulare meisten selbstständig aus, aber bei Kartoffelsalat?
    Hinzu kommt das das versteckte Input befüllt wird mit meiner E-Mail Adresse vom Browser. Immerhin reden wir hier wohl von versteckt und nicht von type=hidden, da type=hidden sowieso von Bots meist ignoriert werden.
    Womit wir auch schon beim Thema Digitaluhr sind. Ein automatisch ausgefülltes Formular ist unter 1 Sekunde Fertig und kurz darauf verschickt.
    Somit haben wir also ein Problem durch Zahlreiche andere ersetzt. Wohlmöglich haben wir sogar den ehrlichen Nutzer als möglichem Bot dargestellt, der Nutzer wird nur nicht verstehen warum.

    Außerdem leben wir nicht mehr in den 90igern… alleine der Gedanke das so Bots funktionieren stammt wohl aus dem Lehrbuch oder entstammen Wunsch Gedanken. Jeder der mal Zeit damit verbracht hat Bots zu schreiben baut heutzutage Eine oder Zwei Initial Attacken ein welche Entweder vom Nutzer ausgeführt werden muss oder testweise leere Formulare übermittelt um zu sehen was noch übermittelt wird um diese Daten bei den Folge Attacken mit zu übermitteln.
    Tut mir Leid aber kompletter Bullshit. Der bisher beste Ansatz den ich kenne sind die neuen Captchas von Google. Ich habe bisher keinen Bot schreiben können der diesen geknackt hat(Zumindest auf JS Basis).

    • Lieber S.

      Danke für deinen Kommentar. Gut zu sehen, dass auch ein vergleichsweise alter Post noch immer auf Interesse stößt.
      Zu deiner Kritik: Google Captcha gab es 2012, als ich den Post geschrieben habe, natürlich noch nicht. Logisch, dass ich darauf nicht eingegangen bin. Du scheinst da aber ja viel Erfahrung zu haben; vielleicht willst du dazu einen Gastbeitrag in unserem Blog schreiben?

      Umgekehrt haben wir gute Erfahrungen mit den Verfahren gemacht, die wir im Blog beschreiben. Und diese Verfahren nutzen wir auch im Moment noch mit gutem Grund.
      1. Selbstausfüllende Browser sind aus meiner Sicht eine erhebliche Sicherheitslücke. Zugegeben: Ob der Browser die ausgeblendeten Felder ausfüllt oder ein Bot ist nicht zu unterscheiden. Durch die Kombination verschiedener Kriterien (Zeit + Honeypots) vermeidet man aber fast alle False Positives.
      2. Wenn man den Autofill des Browsers nutzt: Ein komplett selbstausfüllendes Formular als Anwender sichtprüfen und abschicken – schafft man das echt in weniger als einer Sekunde? Ich zweifle da sehr.
      3. Captchas bleiben nervig und sie sind ein Problem bei der Barrierefreiheit. Da hilft auch Google Captcha nicht.

      Viele Grüße
      Edgar

      • 1. Wozu sollte ein Formular selbstausfüllend ein? Ich wüsste nicht weshalb man z.B. für mein Kontaktformular Vorlagen bereithalten sollte. Das Kontaktformular wird in der Regel doch nur einmal genutzt, alle weiteren Kommunikationen laufen über Email.

        2. In weniger als 1 Sekunde wohl kaum.

        3. Ich hatte noch nie Captchas. Seit 2009 ein Kontaktformular und noch kein einziger Spammer ist durchgekommen. Versucht haben es viele, aber an der Validierung gescheitert. Zudem ist bei mir nur Post erlaubt, kein Get und was es da sonst noch gibt.

        4. Mal davon abgesehen nützt ein Captcha alleine nichts wenn die Eingaben nicht validiert werden. Viele Seitenbetreiber machen es sich zu einfach und nutzen Multifunktionsformulare welche sich sehr leicht zur Laufzeit manipulieren lassen (DOM-Konsole, Firebug), sich also um weitere Eingabefelder erweitern lassen, und welche häufig nicht ausreichend bis mangelhaft abgesichert sind. Man sieht ja häufig in den Hilfeforen was manche Hobbybastler an Formularen aus Beispielcode zusammenflicken.

        Gruß, René

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.