Adventskalender Tag 21 – Mini-Plugin: Die dazulernende WordPress-Blacklist

Wer kennt das nicht? Gerade erst ist der neue Beitrag draußen und schon kommen die ersten Spam-Bots an und möchten dich ärgern. Heutzutage gibt es unzählige Plugins um Spam zu verhindern und die gute Arbeit leisten. Allerdings kommt es immer mal wieder vor, dass sich dennoch ein unerwünschter Kommentar durchschleicht.

Auch WordPress bietet schon seit der Version 1.2.0 intern mit der Funktion check_comments eine Überprüfung auf Spam. Diese Funktion überprüft anhand einer sogenannten „Blacklist“ ob Teile von den Kommentarfeldern Name, E-Mail, URL, Kommentartext, IP und User-Agent mit dieser Liste übereinstimmen. Wenn dies der Fall ist, wird er Kommentar direkt als „Spam“ markiert.

Doch wer pflegt heutzutage diese Liste noch von Hand? Wäre es dann nicht schön, wenn diese Liste automatisiert dazulernt? Hier kommt unser heutiges Mini-Plugin ins Spiel!

Aktivierung Mini-Plugin

Unser Mini-Plugin befüllt nach der Aktivierung erst einmal die Blacklist mit vorhanden Spam-Kommentaren. Dazu registrieren wir einen Callback in den Aktivierungs-Hook von Plugins:

Unsere Funktion holt sich nun alle Kommentare die als „Spam“ markiert sind und ruft intern unsere „Füge zur Blacklist hinzu“-Funktion auf (mehr dazu unten).

[/crayon]

Achtung: Es kann durchaus sein, wenn Ihr viele Spam-Kommentare habt, dass die Aktivierung eine zu lange Laufzeit hat und ins Timeout läuft.

Blacklist up to date halten

Als nächstes wollen wir, dass unsere Blacklist dazu lernt. Hierfür bietet uns WordPress einen sehr nüztlich Hook: transition_comment_status. Dieser wird jedesmal aufgerufen, wenn sich ein Kommentar-Status ändern und übergibt uns den alten Status, neuen Status und Kommentar selbst. Da wir alle 3 Parameter intern benötigen, müssen wir das auch mit angeben:

[/crayon]

Unser Callback sieht dann wie folgt aus:

[/crayon]

Blacklist laden

Zuerst laden wir unsere Blacklist, welche in der Options-Tabelle gespeichert ist. Diese Liste beinhaltet in jeder Zeile ein Keyword, welches unerwünscht ist. Um damit vernünftig arbeiten zu können, benutzen wir die PHP-Funktion explode() um die Zeilenumbrüche (n) zu splitten und in ein Array zu konvertieren. Intern kopieren wir die Original-Blacklist um später überprüfen zu können, ob diese sich von der Neuen unterscheidet. Somit können wir verhindern, dass unnötige Queries an die Datenbank abgesetzt werden.

Blacklist erweitern

Um die Blacklist zu erweitern, überpüfen wir ob der neue gesetzte Status “Spam” und ob die IP-Adresse noch nicht in der Blacklist vorhanden ist. Wenn dies zutrifft, fügen wir die Adresse in die Liste hinzu. Zusätzlich habe ich einen Filter chrico_comment_blacklist_add eingefügt, welcher die Blacklist, den alte und neuen Status, sowie den Kommentar übergeben bekommt. Somit verfügt das Plugin über eine einfache Schnittstelle um die Blacklist um noch weitere Felder zu erweitern.

Blacklist bereinigen

Da es durchaus einmal vorkommen kann, dass mal ein Kommentar als Spam gekennzeichnet wird, aber gar keiner ist, müssen wir natürlich auch das ganz Spiel noch einmal umdrehen. Hier habe ich den Filter chrico_comment_blacklist_add hinzugefügt um das Plugin flexibel zu halten.

Die Überprüfung hierfür ist allerdings etwas aufwändiger:

  1. Zuerst schauen wir, ob der alte Status „spam“ war.
  2. Wenn dies zutrifft schauen wir, ob der Kommentar nicht endgültig gelöscht oder in den Papierkorb verschoben wird.
  3. Zu guter Letzte prüfen wir, ob es dieses Adresse in der Blacklist existiert und nicht schon manuell gelöscht worden ist.

Blacklist speichern

Wenn eine der Überprüfungen (Erweitern/Bereinigen) ausgeführt worden ist, unterscheidet sich die Größe der Original-Blacklist zu neuen Blacklist führen auch anschließend das Update aus. Hierzu konvertieren wir unser Array wieder zurück in die ursprüngliche Liste und speichern diese ab.

Fazit

Mit diesen Mini-Plugin haben wir eine einfache Möglichkeit geschaffen, dass unsere Blacklist dazulernt und zukünftig noch effektiver Spam von unseren Kommentaren fern hält. Ich habe mich bewusst nur auf die IP-Adresse beschränkt, es wäre aber durchaus aus möglich, dass man z.B. noch den Host oder die E-Mail mit in die Blacklist mit aufnimmt.

Das Mini-Plugin findet Ihr auf Gihtub: Comment Blacklist.

Beitrag teilen

Author Avatar

Hi! Mein Name ist Chris und ich arbeite als leidenschaftlicher Webentwickler im X-Team der Inpsyde GmbH. Meine Spezialgebiete sind die Backend- und Frontendentwicklung. Wenn ich nicht gerade über Barrierefreiheit und Usability diskutiere, bin ich auf Google+ unterwegs. In meiner Freizeit absolviere ich ein Informatikfernstudium, treibe gern und viel Sport, verschlinge ein Buch nach dem Anderen und blogge auf www.chrico.info.

Auch interessant:

WooCommerce Wochenrückblick #32: Woo 3.1, Live Chats und Snippet Tutorials

von Michael Firnkes

Die neue WooCommerce-Version verbessert hauptsächlich den Import und Export von Produkten. Und: Live Chats können - richtig eingesetzt - deinen Umsatz an ...

Weiterlesen

Wir suchen Verstärkung: WordPress PHP Entwickler/in in Dresden oder Homeoffice

von Michael Firnkes

MarketPress wächst, dank unserer WooCommerce-Suite German Market. Wir suchen dich - um diesen Erfolg weiterzuführen, und zur Entwicklung neuer Produkte. ...

Weiterlesen

WooCommerce Wochenrückblick #29: Beliebteste Zahlungsarten und sinnvolle Produktauswahl

von Michael Firnkes

Kauf auf Rechnung ist beliebter, als gedacht. Und zu viele Produkte können deine Kunden auch verwirren - wenn sie schlecht präsentiert werden. Dies und m ...

Weiterlesen

WooCommerce 3.0: Neue Galerie für Produktbilder, mehr Geschwindigkeit und Update-Hinweise

von Michael Firnkes

Das Team von WooCommerce hat die Version 3.0 seines extrem erfolgreichen Onlineshop-Systems veröffentlicht. Das Release läuft unter dem Namen "Bionic But ...

Weiterlesen

Kommentare

2 Kommentare

  1. #1

    Dankeschön für dieses Geschenk. Werde ich gleich in meine Installation mit aufnehmen 🙂

Schreibe einen Kommentar

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

Du kannst folgende HTML Tags verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

Abonniere unseren Newsletter

Trage hier deine E-Mail Adresse ein, damit du unseren Newsletter abonnieren kannst.