Antispamfalle ohne Plugin

Inhaltsverzeichnis

Die Suche nach einer Antispam-Lösung

Mit der Reaktivierung der Kommentare hier auf FastWP, stellte sich vor kurzem auch wieder die Frage, was ich gegen den Spam tun kann. Zur Auswahl im Kampf gegen Spam-Kommentare gibt es inzwischen eine breite Palette von Antispam Plugins und Services, die zuverlässig jeglichen Spam herausfiltern und nur noch legitime Kommentare im Blog freischalten. In meinem Artikel dazu Wie werde ich ihn los – in 10 Tagen? schrieb ich über genau dieses Thema und das Problem, dass mir Antispam Plugins oft zu aufwendig und zu komplex sind. Dort suchte ich deshalb über 10 Tage lang, nach einer cleveren, smarten Lösung, die so minimal wie nur möglich ausfallen sollte.

Eine Honigfalle, die klebt und schmeckt

Am Ende war das Ergebnis ein klassischer Honeypot. Eine Honigfalle, in die Bots nun einmal zwangsläufig tappen müssen, beim Versuch das Kommentarformular korrekt auszufüllen. Die Idee dahinter: Nicht einfach ein unsichtbares Feld hinzufügen (wie üblich), sondern so tun als wäre der Honeypot ein Pflichtfeld. Als wäre die Falle, das Originalfeld von Wordpress selbst. Leider brachte das Probleme mit Wordpress, denn der Cookie für Kommentare speichert die eingegeben Daten und füllt die Felder automatisch aus.

Zwar lässt sich das umgehen, es sinnvoll zu gestalten, ist aber eher eine Idee für große Antispam Plugins, nicht aber für eine möglichst minimale Lösung, wie ich sie anstrebte. Also neu gedacht und eine Doppelfalle gebaut. Zwei Felder, von denen eines ausgefüllt werden muss, das andere dagegen auf gar keinen Fall Inhalte aufweisen darf. Das funktioniert hier seit mehreren Tagen perfekt und lässt keinerlei Spam mehr durch.

Antispam Snippet für Wordpress

Mit dem Snippet, welches ihr in die functions.php eures Themes eintragen müsst, erstellt ihr die beiden notwendigen Input-Felder automatisch und unter dem Kommentarformular. Wichtig ist, dass beide theoretisch sichtbar sind und nur via CSS versteckt, nicht aber komplett ausgeblendet werden. Bots sind clever geworden und versteckte Felder werden inzwischen sehr gut erkannt. Um möglichst eine Rate von 99 Prozent Spamerkennung zu erreichen, müssen beide Felder unter dem Formular, voll sichtbar, aber händisch versteckt, ausgegeben werden.

add_action('preprocess_comment', 'preprocess_new_comment');

function preprocess_new_comment($comment_data)
{
	if (!empty($_POST['a'])) {
		die('no spam!');
	}

	return $comment_data;
}

add_action('comment_form_after_fields', ('catcher'));

function catcher()
{
	echo '<input name="a" type="text" maxlength="245" autocomplete="off" style="height:0;width:0;border:0;float:right">';
}

add_action('preprocess_comment', 'preprocess_new_comment_two');

function preprocess_new_comment_two($comment_data)
{
	if (empty($_POST['b'])) {
		die('no spam!');
	}

	return $comment_data;
}

add_action('comment_form_after_fields', ('catcher_two'));

function catcher_two()
{
	echo '<input id="b" name="b" type="text" maxlength="245" autocomplete="off" style="height:0;width:0;border:0;float:right">';
}

Nun sind beide Felder im Kommentarformular von Wordpress vorhanden und entsprechend markiert. Das erste von ihnen dient als klassische Honigfalle für automatisch ausfüllende Spambots und darf auf gar keinen Fall ausgefüllt werden. Das andere dagegen dient als Sicherheit, denn es ist leer, muss aber ausgefüllt werden. Egal wie der Bot vorgeht, ob er alles ausfüllt oder nicht, er tappt in eine der beiden Fallen und wird blockiert. Der Clou am zweiten Feld ist nämlich eine winzige Zeile Javascript, die das Feld beim Aufruf der Seite automatisch ausfüllt. Spambots verstehen in der Regel aber kein Javascript und führen es vor allem nicht aus, ergo bleibt das Feld leer. Das Script, welches ihr unten auf eurer Seite einfügen könnt, sieht dann so aus.

<script>document.getElementById("b").value = "SPAMSCHUTZ"</script>

Zuverlässiger, aber einfacher Spamschutz

Diese Art von Antispamfalle ist nicht nur denkbar einfach konstruiert, sie funktioniert auch noch hervorragend. Da Bots nämlich meist alle zusätzlichen Felder ignorieren und sie eben nicht mehr ausfüllen (deshalb funktionierte das Author-Feld im Versuch auch so gut), muss der Spambot zwangsläufig in eine der Fallen geraten. Und selbst wenn Spambots cleverer werden, oder gezielt diesen Blog, mit dieser Antispam-Lösung angreifen würden, könnte ich das Ganze immer noch verfeinern. Zum Beispiel, in dem zufällig generierte Wörter eingefügt werden müssen, oder Timestamps verwendet werden, die automatisch eingefügt werden, sobald der Kommentar abgeschickt wird.

Direkt als Querie, innerhalb der URL. Es ist vieles denkbar, um diese, eigentlich extrem einfache Methode, noch weiter auszubauen und sicherer zu gestalten. Aber wozu? FastWP bekommt, aufgrund des Themas Wordpress, seit Anfang an deutlich mehr Spam als alle anderen meiner Wordpress Blogs. Diese doppelte Antispamfalle filtert nun aber zuverlässig alles heraus und seit sie hier final eingebaut ist, was ungefähr seit einer Woche der Fall ist, erledigt sie ihre Arbeit perfekt und hat keinen einzigen Spam-Kommentar mehr durchgelassen.

Christian Pust
WordPress & Onlinemarketing Experte mit über 15 Jahren Erfahrung. Entwickler & CEO von Trackboxx – der Google Analytics Alternative.

Eine Antwort

  1. Hallo Christian,

    diese Kombination aus PHP und Java funtkioniert in dieser Form nicht mehr. Zumindest werden bei mir dann die Kommentare nicht zugelassen. Hier scheint eine Veränderung stattgefunden zu haben, die Funktion “kaputt” machen

Schreibe einen Kommentar

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

Das könnte dich auch interessieren

Du benötigst Unterstützung bei deinem WordPress Projekt?

Dein Ansprechpartner
Christian