Spam unter WordPress ohne Plugins verhindern!

Ich habe bei einem meiner Projekte das Problem, dass ich WordPress verwende, allerdings keine Plugins oder Themes verwenden kann. Wie verhindert man also bei so einem Projekt Kommentar-Spam?

Es ist eigentlich ganz einfach: Man baut in die functions.php ein paar neue Funktionen gegen Spam ein:

1. Webseiten-Feld entfernen!

Spammer / Spam-Bots wollen ihre Webseite bekannter machen, gibt es kein -Webseiten-Feld ist das Risiko niedriger, dass Spam gepostet wird.

PHP-Code:

function remove_comment_fields($fields) {
    unset($fields['url']);
    return $fields;
}
add_filter('comment_form_default_fields','remove_comment_fields');
 
function rkv_url_spamcheck( $approved , $commentdata ) {
   return ( strlen( $commentdata['comment_author_url'] ) > 1 ) ? 'spam' : $approved;
}
 
add_filter( 'pre_comment_approved', 'rkv_url_spamcheck', 99, 2 );

Diese Funktion entfernt das Webseiten-Feld und markiert Kommentare mit Webseite automatisch als Spam. (Quelle: catswhocode.com)

2. Kommentare mit Links entfernen

Als Nächstes weist man die Besucher des Blogs darauf hin, dass Links in den Kommentaren verboten sind und baut die folgende von mir erstellte Funktion ein, die Kommentare mit Links erkennt.

PHP-Code:

// BBCodes und HTML-Links erkennen - Wronnay.net
function wy_link_on_comment() {
if(stristr($_POST['comment'],"[link=") || stristr($_POST['comment'],"[url=") || stristr($_POST['comment'],"a href=") || stristr($_POST['comment'],"http://")){
wp_die( __('Bitte keine Links posten!') );
}
}
add_action('pre_comment_on_post', 'wy_link_on_comment');

Die Funktion erkennt sogenannte BBCodes, die eigentlich gar nicht in WordPress verwendet werden und normale HTML-Links und weist den Autor darauf hin, dass Links nicht erlaubt sind.

Update (23.04): Ich habe jetzt „ || stristr($_POST[‚comment‘],“http://“)“ hinzugefügt. Der Code erkennt jetzt alle Links.

Anti Spam Updates + Tutorial

In meinen letzten Beitrag habe ich berichtet, dass ich ein SPAM-Problem hatte. Dieses habe ich jetzt beseitigt und gleich ein neues Script namens „AntiSpam NewsSystem“ zum Download bereitgestellt. Wie ich das angestellt habe, möchte ich in diesem Artikel erklären:

Zuerst sollte man wissen, dass SPAM-Autoren meistens keine Menschen, sondern Programme („Spambots“) sind, die das Web ähnlich wie Google durchsuchen und versuchen, in jeden Formular, dass sie finden, Werbung einzutragen. Dabei füllen die Spambots meistens typisch benannte Formulare aus, die man meistens ausfüllen muss (also z.B.: Email, Text, Betreff, Name, …). Das kann man sich zunutze machen, indem man ein Feld mit dem Namen „Email“ anlegt, den Besucher aber seine E-Mail-Adresse in das Feld „hallo“ eintragen lässt. Danach überprüft man, ob in das Feld „Email“ etwas eingegeben wurde und wertet es dementsprechend aus. Sollte das immer noch nicht funktionieren, überprüft man noch, ob Wörter wie „Viagra“ oder „Buy“ eingegeben wurden.

Hier meine Lösung:

Zuerst das HTML-Formular:

<form action="" method="post">
<p class="hallo"><input id="email" type="text" name="email" value="" size="60" /></p>
Kommentar schreiben:
<textarea class="li" name="comment" rows="5" cols="40"></textarea>
Ihr Name: <input class="li" type="text" name="name" />
<input class="lb" type="submit" name="submit" value="Kommentieren" />
</form>

Dann muss man noch per CSS die Class „hallo“ auf dispaly:none; setzen (So sehen die Besucher die Email-Abfrage nicht):

.hallo {display:none;}

Und abschließend wird mit PHP überprüft, ob etwas in das Feld „Email“ eingegeben wurde (der Besucher also ein Spambot ist):

<?php
  if(isset($_POST['submit']) AND $_POST['submit'] == "Kommentieren") {
	  if(isset($_POST['email']) && $_POST['email']) {
	  echo"<div class=\"fehler\">You are an SPAM-Bot!</div>";
	  }
      // hier dann noch der restliche Code...
  }
?>