Spam bekämpfen mit Antispam Bee und Reguläre Ausdrücke via Plugin-Hook

Von Flatpack
Antispam Bee ist eines der effektivsten und beliebtesten Plugins, wenn es um das Thema Kommentar-Spam geht. Leider wurden aus Kostengründen 2 sehr mächtige Filter entfernt. Die Filterung nach Länder und Sprache ist nicht mehr möglich. Dadurch bekommen Reguläre Ausdrücke eine größere Bedeutung. Was sie können und wie man sie anwendet, zeigt dieser Artikel.

Ohne Antispam Bee würde ich täglich unzählige Benachrichtigungen über Kommentare erhalten, die nur aus Spam bestehen. Bislang war mein Postfach immer sehr sauber. Durch den Wegfall der Länder- und Sprachfilterung kommen aber wieder deutlich mehr Spam-Kommentare aus östlichen Ländern durch. Da diese mittlerweile mehr als lästig sind, werde ich Reguläre Ausdrücke (engl. Regular Expression, Kurzform RegExp) verwenden, um Inhalte und Absender zu filtern. Zwar gibt es auch die Möglichkeit, dem Team von Antispam Bee nicht erkannten Spam zu melden, aber Plugin Hooks mit Regulären Ausdrücken sind nicht nur effektiver, sondern auch deutlich schneller. Das Warten auf ein Update entfällt dabei und der Algorithmus kann wesentlich besser auf die eigenen Bedürfnisse abgestimmt werden.

Plugin-Hook mit dem Anti-Spam Plugin verwenden

Über einen sogenannten Hook werde ich eine Funktion in die functions.php meines verwendeten WordPress Themes einbinden, die vom Plugin während seiner Ausführung aufgerufen wird. Das ermöglicht mir, eigene Aufgaben an die integrierten Funktionen vom Plugin anzuhängen. Dabei sollte man jedoch aufpassen, da fehlerhafter Code die gesamte Webseite lahmlegen kann. Bei kopiertem Code muss auf Sonderzeichen geachtet werden, die im HTML vielleicht anders dargestellt werden. Oftmals ist das bei einem Hochkomma der Fall. Statt des korrekten ‚ findet man in Codeschnipseln oft ´ und wundert sich, warum die Seite nicht mehr funktioniert.

// Diese Funktion bindet den Hook ein
function antispam_bee_patterns() {
    add_filter( 'antispam_bee_patterns', 'antispam_bee_add_custom_patterns' );
}
add_action( 'init', 'antispam_bee_patterns' );
 
// Diese Funktion bestimmt die einzelnen Filter (author, host, body, ip, email) und wird zur Laufzeit über den Hook aufgerufen. Mehrere Reguläre Ausdrücke getrennt durch |
function antispam_bee_add_custom_patterns($patterns) {
	// Filterung des Autors
	$patterns[] = array(
		'author' => 'Autor1|Autor2|Autor3'
	);

	// Filterung der URL (Beispiel filtert casino.co.uk und viagra.net mit und ohne www.
	$patterns[] = array(
		'host' => '^(www\.)?casino\.co\.uk$|^(www\.)?viagra\.net$'
	);

	// Filterung des Kommentars (3 oder mehr Links im Kommentar = Spam)
	$patterns[] = array(
		'body' => '(.*(http|https|ftp|ftps)\:\/\/){3,}'
	);

	// Filterung der IP Adresse (filtert 192.168.XXX.XXX)
	$patterns[] = array(
		'ip' => '^(192\.)(168\.)(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.)([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$'
	);

	// Filterung des Kommentars (.ru oder .bid = Spam)
	$patterns[] = array(
		'email' => '(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.(ru|bid)+$)'
	);

	return $patterns;
}

Auf dieser Seite findet ihr die Regulären Ausdrücke für viele typische Spams. Habt ihr mit dem einen oder anderen davon ein Problem, dann lässt es sich mit dem entsprechenden Ausdruck leicht beheben.

WordPress bietet zwar auch einige Möglichkeiten, Kommentare als Spam zu markieren, aber eine Email erhalte ich dann trotzdem. Und gerade das will ich ja vermeiden.

Reguläre Ausdrücke als Filter verwenden

Reguläre Ausdrücke sind nicht einfach und sehen schon bei Kleinigkeiten sehr kompliziert aus. In meinem Code habe ich bereits die gängigsten Filter als Beispiele aufgeführt. Wer sich traut, eigene Filter zu erstellen, kann diese sehr schön auf debuggex.com testen. Erst nach erfolgreichem Test werden sie in die functions.php eingebaut.