barrierefreies Webdesign Ingo Turski

zum Inhalt

Ingo

Tips und Tricks:Captchas sind Blödsinn - Alternativen gegen Spam

Captchas sind mehr oder oft weniger entzifferbare Zeichenfolgen, die zunehmend vor dem Versenden eines Formulars in einer Grafik erkannt und mühsam in ein Eingabefeld übertragen werden müssen. Das behindert vor allem Besucher mit Sehschwächen und ist zudem zur Abwehr von Spam (unerwünschten automatisierten Einträgen) auch völlig unnötig.

Ich habe nicht eruiert, wer auf diese Schnappsidee gekommen ist, aber das war eindeutig ein Fehlschuss. Spammer führen einen ständigen Kampf und könnten auch noch so unkenntliche Captchas austricksen durch fortgeschrittene Texterkennung oder auch Menschen, denen zum Zugang einer (Porno-)Seite das Captcha eines damit vor Spam gesicherten fremden Formulars vorgesetzt wird. Bisher mussten Spammer noch gar nicht zu solchen Tricks greifen, da es noch genügend nicht durch Captchas gesicherte Formulare im Netz gibt. Mit der zunehmenden Verbreitung von Captchas allerdings ist damit zu rechnen, dass dieser Schutz zunehmend ausgehebelt wird – siehe z.B. PWNtcha und aiCaptcha.

Captcha-Erfinder sind sich der Möglichkeiten moderner Texterkennung bewusst und behindern daher (noch völlig unnötig) schon jetzt die menschlichen Besucher mit kaum noch eindeutig erkennbaren Captchas - und sie haben dies sogar einkalkuliert, da sie gleich einen Link für ein weiteres Captcha anbieten in der Hoffnung, die versteckte Zeichenfolge könnte hieraus richtig geraten werden. Ich habe schon Seiten gesehen, bei denen ich selbst beim zehnten Captcha noch daneben lag. Und dabei leide ich - außer beginnender Alterssichtigkeit, weshalb ich bei meinem 19'-Monitor nur eine Auflösung von 1024*768 verwende - nicht an einer Sehschwäche.

Blinde sind am schlimmsten von dem Captcha-Wahn betroffen. Ihnen wird der Zugang damit völlig verwehrt, weshalb Captchas auf barrierefreien Seiten auch nicht eingesetzt werden dürfen. Es sollte auch jedem klar sein, dass es kein barrierefreies Captcha geben kann. Wenn die Zeichenfolge zusätzlich zum Captcha für Behinderte auf andere Weise - z.B. ganz simpel als Alternativtext - präsentiert würde, könnte man auf das Captcha zur Freude aller gleich ganz verzichten. Und selbst eine alternative Sprachausgabe wäre nicht barrierefrei, da nicht sichergestellt ist, dass die Sprache ausgegeben und auch verstanden wird - manche Sehbehinderte nutzen lediglich eine extreme Textvergrößerung und Blinde eine Braillezeile und vielen Bildschirmarbeitsplätzen stehen auch gar keine Lautsprecher zur Verfügung.

Eine barrierefreie Alternative zu Captchas

Die Programme der Spammer, die das Internet nach Formularen absuchen und diese analysieren, erkennen recht gut, in welchen Feldern welche Eingaben erwartet werden und befüllen diese sogar meist passend. Genau dies kann man gegen sie zur Spam-Abwehr einsetzen. In meinem Gästebuch habe ich erfolgreich Fallen für Spam-Bots eingebaut wie diese:

.nosee { display:none; }

<p class="nosee">
  <label for="email">Ihre eMail wird nicht abgefragt, tragen Sie auch hier bitte NICHTS ein:</label>
  <input id="email" name="email" size="60" value="" />
</p>

<?php
  if(isset($_POST['email']) && $_POST['email']) {
    # nicht eintragen, sondern Mitteilung über Spamverdacht
  }
?>

Es hat sich gezeigt, dass 97% der Spam-Bots darauf hereinfallen Diese und folgende Angaben stützen sich auf eine Auswertung der letzten
10.000 von insgesamt über 100.000 in drei Jahren geblockten Spams.
 und hier sogar eine gültige - wenn auch wohl frei erfundene - Adresse eintragen. Wichtig bei dieser Methode ist:

Ganz wichtig aber: seien Sie kreativ und übernehmen diesen Code nicht 1:1 - wenn Spam-Bots häufiger an einem bestimmten Code scheitern, könnten die Programmierer diesen sonst zukünftig berücksichtigen.

Wählen Sie aber keine Phantasiebezeichnungen für die Eingabefallen, sondern gängige Begriffe - ganz besonders anziehend sind auch "homepage" mit 75% und "url", da solche Felder i.d.R. automatisch verlinkt werden. Ihre echten Eingabefelder können Sie dagegen kryptisch benennen und hierdurch einige Spam-Bots dazu veranlassen, diese leer zu lassen. Wenn es sich dabei um Pflichtfelder handelt, ist das auch ein zusätzlicher Schutz gegen Spam (noch effektiver übrigens, wenn Sie solche Eingabefelder mit einem Text vorbelegen, der bei der Eingabe gelöscht wird bzw. werden muss).

Auch die Zeit arbeitet gegen Spam

Wie lange benötigt ein echter Besucher zum Schreiben seiner Nachricht? Bestimmt länger als 16 Sekunden und (selbst wenn er zwischendurch einschläft) nicht länger als 16 Stunden. Spam-Bots dagegen brauchen in 76% nur wenige Sekunden; weniger als 1% der Bots scannen das Formular nur noch einmalig, um es dann für alle folgenden Spams zu nutzen. Es ist recht selten, dass automatisierte Spam-Einträge außerhalb dieser Zeitspanne nach Anforderung des Formulars erfolgen. Um dies zur Spam-Abwehr zu nutzen, müssen Sie nicht extra eine Session starten - ein verdecktes Formularfeld reicht hierzu völlig:

<?php define ('Zeit', time()); // Startzeit des Scripts setzen

# weiterer Code bis zur Überprüfung:
if (!isset($_POST['date'])) { /* Feld fehlt ->Spam */ }
elseif (!is_numeric($_POST['date'])) { /* Manipulierung ->Spam */ }
elseif (intval($_POST['date']) > Zeit-10) { /* zu schnell ->Spam */ }
elseif (intval($_POST['date']) < Zeit-10*3600) { /* altes Formular ->Spam */ }
else { /* kein Spam¿ -> ggf. weitere Prüfungen und Verarbeitung des Eintrages */ }

# weiterer Code bis zum Formular:
echo '<input name="date" type="hidden" value="', time(), '" />';
?>

Allein der Zeitvergleich filtert über 76% aller Spams aus. Und da Spam-Bots verdeckte Input-Felder normalerweise ungeprüft übertragen, muss dieses Feld noch nicht einmal durch Benennung oder Verschlüsselung des Wertes unkenntlich gemacht werden.

Inhaltsfilter zur Erkennung von Spam

Zusätzlich können und sollten die Inhalte analysiert werden. Auch wenn die Spam-Bots sehr effektiv programmiert sind - die Spammer sind meist blöd und verschicken allzu leicht als Spam erkennbare Inhalte. Außerdem können Sie nur hierüber die seltenen manuellen Spam-Einträge zu verhindern versuchen. Ich will hier nur einige Kriterien aufzeigen, anhand derer Spam relativ zuverlässig von echten Inhalten unterschieden werden kann.

Links sind meist der wichtigste Inhalt und eigentliche Grund zur Versendung von Spam. Wenn ein Text bereits mit einem Link begonnen wird, ist die Wahrscheinlichkeit sehr hoch, dass es sich um Spam handelt. Spam ist auch daran zu erkennen, dass gleichzeitig über mehrere Methoden versucht wird, eine Verlinkung zu erreichen:

Wortfilter können - aber bitte mit Umsicht - eingesetzt werden. Die einmalige Verwendung des Wortes »Viagra« ist mit Sicherheit noch kein Indiz für Spam. Übel ist insbesondere eine einfache Suche nach Zeichenfolgen; so wäre es fatal, nach »porn« zu suchen und Ansporn dadurch als Spam zu betrachten.

URLs können ebenfalls ein Kriterium für Spam sein, besonders i.V. mit Wortfiltern. So ist der Versuch, eine Adresse wie pharmacy.example.org/tramodol zu verlinken, mit Sicherheit Spam. Und absolut in jede meiner Spam-Fallen war dieser stümperhafte (hier verkürzt wiedergegebene) Versuch getappt:

<a href="http://www.example.edu/x/y/z.htm?viagra-online">viagra online</a>
http://www.example.edu/x/y/z.htm?viagra-online
[url=http://www.example.edu/x/y/z.htm?viagra-online]viagra online[/url]

Ich verwende in meinem Gästebuch sehr verschiedene Arten von Wortfiltern. Besonderes Augenmerk gilt wie schon erwähnt dem Textanfang und auch dem Textende; über 40% der Spams fallen hierbei auf. Eine unsinnige Zeichenfolge im Betreff wird zu über 14% eingetragen und immerhin 0,5% der Bots tragen in verschiedene Felder den gleichen Inhalt ein.
Die anderen der hier vorgestellten Methoden konnten allerdings bereits fast 99% der Spams filtern, so dass diese Wortfilter nur das fehlende Tüpfelchen auf den „i“ für eine nahezu 100%ige Spam-Abwehr darstellt. »Nahezu« deshalb, weil sich Spam-Inhalte ändern und z.B. für neue Produkte geworben wird, so dass bei den in drei Jahren gezählten 100.000 Spam-Versuchen kürzlich doch ein sehr intelligent programmierter Spam-Bot Erfolg hatte — aber danach aufgrund angepasster Wortfilter nicht mehr.

Umbruch extrem langer Zeichenfolgen durch Einfügen von Leerzeichen schließlich dient nicht nur der Stabilisierung des Layouts einer Seite. Spam-Links haben oft eine extrem lange URL, die natürlich kein Leerzeichen enthalten kann. Kommen solche URLs mehrfach vor, ist dies ein relativ sicheres Indiz für Spam. Meine Wordwrap-Funktion zählt daher auch die erforderlichen Umbrüche zur Spam-Erkennung mit einer Quote von über 45%.
Aber auch das Gegenteil kommt vor: Über 3% der Spam-Bots setzen Zeilenumbrüche in einzeilige Eingabefelder.

Ich bitte um Verständnis dafür, dass ich hier nicht alle meine Methoden und Kriterien zur Spam-Abwehr veröffentlichen will, da sie sonst von Spammern ausgehebelt werden könnten. Mit den hier aufgezeigten Tipps sollte es aber möglich sein, individuelle und damit sichere Alternativen zu Captchas zu entwickeln, so dass Sie Ihre Besucher nicht mit diesen lästigen oder gar rätselhaften Barrieren konfrontieren müssen. Wenn nicht, sprechen Sie mich an und ich unterstütze Sie darin.