Adventskalender Tag 7 – Mini-Plugin: Bekannte Spam-IPs in WordPress blockieren

Bereits am Dienstag in unserem dritten Türchen hat Toscho einige nützliche SQL-Statements aufgezeigt um die Kommentare in WordPress zu analysieren und sich Informationen zu generieren.

Heute möchten wir euch ein kleines Mini-Plugin vorstellen, um bekannte IP-Adressen daran zu hindern, Kommentare bei uns zu hinterlassen. Als Voraussetzung dafür muss natürlich gegeben sein, dass Ihr die Spam-Kommentare nicht endgültig löscht.

Das Mini-Plugin

Unser kleines Mini-Plugin hängt sich in den WordPress-Hook preprocess_comment, welcher beim Erstellen eines neuen Kommentars in der Funktion wp_new_comment() ausgeführt wird. Hier haben wir die Möglichkeit noch bevor der Kommentar in die Datenbank eingefügt wird zu reagieren.

add_filter( 'preprocess_comment', 'chrico_block_known_spam_ips' );

Unser Callback sieht wie folgt aus:

/**
* Look up comment IP in DB and reject if spam from this IP was found.
*
* @wp-hook preprocess_comment
* @param   array $commentdata
* @return  array|void Dies on success, returns the comment data otherwise
*/
function chrico_block_known_spam_ips( Array $commentdata ) {
    global $wpdb;

	// Use the same code as WordPress, because that is what we find in our database.
	$ip = preg_replace( '/[^0-9a-fA-F:., ]/', '', $_SERVER[ 'REMOTE_ADDR' ] );

	$sql = "
	SELECT `comment_author_IP`
	FROM   `$wpdb->comments`
	WHERE  `comment_author_IP` = '$ip' AND `comment_approved` = 'spam'
	LIMIT  1";

	$match = $wpdb->get_results( $sql );

	if ( empty ( $match ) ) // nothing found
	{
		return $commentdata;
	}

	// you could send a redirect here instead.
	exit; // spammer detected
}

Da wir uns sehr früh in den Kommentar reinhängen, müssen wir das Vorbereiten der IP und des User-Agents aus dem Core übernehmen. Das ist zwar unsauber, aber leider gibt es dazu keine Helfer-Funktionen innerhalb der Comment-API.
Als erstes wird ein Query an die Datenbank ausgeführt um zu überprüfen, ob es schon einen solchen Spam-Kommentar mit der gleichen IP gibt. Leider bietet die Comment-API von WordPress nur eine sehr ungenaue Suche über die Klasse WP_Comment_Query. Hier können wir im Such-Array “search” übergeben, welche allerdings mit einer ODER-Verknüpfung und einen LIKE in folgenden Feldern sucht:

  • comment_author
  • comment_author_email
  • comment_author_url
  • comment_author_ip
  • comment_content

Deshalb haben wir uns entschieden einen eigenen performanten Query zu schreiben.

Die zweite Maßnahme um den Kommentar auf Spam zu prüfen, benutzen wir die interne WordPress-Methode check_comment() um gegen die Blacklist zu prüfen. Wenn eine der zwei Überprüfungen matched, brechen wir ab und verhindern so das Speichern des Spam-Kommentars.

Fazit

Mit diesem kleinen Plugin können wir bewirken, dass unerwünschte Kommentare schon frühzeitig geblockt werden. Somit können wir auch einiges an Last von unserer Datenbank nehmen und diese um unnötige Kommentare erleichtern. Allerdings setzt dieses Plugin auch voraus, dass bereits ein Datenbestand an Spam vorhanden ist und dieser auch langfristig aufgehoben wird.

Das Mini-Plugin Block Known Spam IPs findet Ihr auf Github.

Eure Meinung ist gefragt

Jetzt seid ihr an der Reihe! Wie verhindert ihr Spam? Hebt Ihr eure Spam-Kommentare auf oder löscht ihr die? Habt ihr schon einmal von der “Blacklist” in WordPress gehört? Lasst es uns wissen!

Newsletter abonnieren

Schaue unsere Datenschutzverordnung an

Das könnte dich auch interessieren

Neues Plugin: B2B Market für WooCommerce

B2B Market ist die erste deutschsprachige Lösung für B2B-Shops mit WooCommerce und WordPress. Verkaufe an B2B und an B2C, erfülle die gesetzlichen Anfor ...

Mehr erfahren

WooCommerce Projekte vorgestellt: Die Beer Ambassadors - Bierspezialitäten im Abo

Die Beer Ambassadors haben einen ganz besonderen Onlineshop auf die Beine gestellt - mit WooCommerce und German Market. Wir haben die beiden Gründer Thoma ...

Mehr erfahren

Die Übersicht: 5 DSGVO Plugins für WordPress und WooCommerce

Auch nach dem Inkrafttreten der EU-Datenschutzverordnung suchen viele Portal- und Shopbetreiber nach einer Lösung, um die gesetzlichen Anforderungen zu er ...

Mehr erfahren

Kommentare

7 Kommentare

  1. Hallo Chris, tolle Funktion hilft mir so leider nicht.
    Setzt allerdings vorraus, dass der Absender bekannt ist und schon mal einen Kommentar geschrieben hatte.
    Ich habe folgenden Fall:
    Es meldet sich immer wieder der selbe User (als Abonnent), (lbzxxh520@outlook.com) den ich nicht kenne, an. Weitere Handlungen kann ich nicht feststellen. Ist es möglich unbekannte ‚User‘ auszusperren?? Nach löschen ist er nach ca. 12h wieder da !
    Gibt es eine BlackList für (Spam)User??

    Schönes Wochenende
    Gruß Joachim

    1. Hallo Joachim,

      Ja, wie bereits erwähnt setzt das Mini-Plugin voraus, dass man schon Spam in der Datenbank vorhanden hat. 🙂

      Es gibt unter Einstellungen -> Diskussionen eine sogenannte „Blacklist“ wo du z.B. die genannte E-Mail eintragen kannst und so dauerhaft diese blocken kannst.

      Schönen Samstag,
      Chris

  2. Also ich habe seit Monaten AntiSpamBee (http://antispambee.de/) installiert, das klappt wunderbar, kein Spamproblem mehr
    (Anm. d. Red.: Link wurde in die Ziel-URL umgeändert)

  3. Auch bei mir werkelt AntiSpamBee – völlig unbemerkt im Hintergrund und kaum systembelastend – vor sich hin. Eines der besten Plugins zur Spamabwehr überhaupt. Kann ich nur empfehlen!
    Euch allen ein gesegnetes zweites Adventswochenende!
    Stefan

  4. Auch ich benutze AntiSpamBee und bin sehr zufrieden. Spam wird automatisch nach 5 Tagen gelöscht. Eine Frage hätte ich allerdings: Ich nutze Subscribe2 um meine Freunde auf dem Laufenden zu halten. Ich habe die letzten vier Wochen nicht in meinem Blog gearbeitet und auf einmal 500 subscriptions gehabt. Kann ich irgendwie Prüfen, wer davon Spam ist, und wer nicht?

    Grüße

    Sascha

  5. Bei mir arbeitet AntiCaptcha – eine Lösung, die Spambots ein CAPTCHA vorgaukelt, das ‚echte‘ Nutzer aber nicht zu sehen bekommen. Wenn ein Kommentar mit einem ABtwortversuch zum CAPTCHA ankommt, ist das also zu 99% ein Spamversuch.

    Damit sind mir in anderthalb Jahren null(!) SPams durchgekommen und genau ein echtes Posting abgefangen worden (weil der Nutzer für seinen Browser einen automatischen CAPTCHA-Beantworter installiert hatte, um die CAPZCHAs nicht selbst beantworten zu müssen…).

    Wozu die Nutzer durch Reigen springen lassen um sich auszuweisen, wenn die Bots das ganz von selbst tun? 😉

  6. Ich habe es mit WP-Ban geschafft,.. ich traute mich nicht an die htaccess Datei heran… das Programm ist eigentlich ganz OK,.. nur blöd, wenn man sich selber sperrt, weil man zum Beispiel 3 mal falsches Passwort eingegeben hat… Einige male passierte das und ich musste erst einen anderen Rechner benutzen, um dann wieder ONLINE zu kommen,.. ( NAJA Aber immerhin es funktioniert ).,..
    gruß KARL

Schreibe eine Antwort

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> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>