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

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

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

Das könnte dich auch interessieren

WooCommerce-Bestellwert erhöhen

Die Umsätze in WooCommerce erhöhen, ohne mehr Pakete zu versenden? Ist das Zauberei? Nein, das geht ganz ohne Hokuspokus – und zwar mit der Erhöhung d ...

Mehr erfahren

WooCommerce SEO - Produktbilder und Produktgalerie

Im letzten WooCommerce SEO Beitrag hier im MarketPress-Blog ging es um Produktseiten, Produktbeschreibungen und Produktkategorien. Heute sind die Produktbi ...

Mehr erfahren

WooCommerce SEO - Produktseiten, Produktbeschreibungen & Produktkategorien

Mit der Suchmaschinenoptimierung für WooCommerce kann man gar nicht früh genug anfangen. Startvorteile im Rennen um die besten Plätze sichert sich, wer ...

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 an Tobias Antwort abbrechen

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>