Wordpress Performance Wordpress SEO Wordpress Security Wordpress Themes Wordpress Hosting Mein Setup Das Buch

Spam ohne Plugin blocken

Spam ohne Plugin blocken

Schutz vor Spam ohne Plugin

Wer WordPress installiert, der sollte auch schnell daran denken direkt ein passendes Antispam Plugin aufzuspielen. Geschieht dies nicht, befinden sich meist wenige Stunden später bereits unzählige Spam-Kommentare in der Moderation, was nervig und extrem unübersichtlich ist. Doch Spam Plugins sind mir von Anfang an ein Dorn im Auge, denn entweder sind sie nicht mit dem deutschen Datenschutz vereinbar, oder sie arbeiten stetig im Hintergrund. Gerade letzteres ist eine Sache, die mir so überhaupt nicht gefällt, denn wenn alle Kommentare ständig von einem Plugin auf verdächtige Parameter kontrolliert werden, dann leidet die Performance darunter, ganz egal wie sauber die Erweiterung auch programmiert ist. Was also tun? Ohne Plugin gibt es unsagbar viel Spam, mit Plugin verschlechtert sich die Performance und der Server hat definitiv mehr zu tun. Beides nicht sonderlich schön, Zeit also für eine alles rettende dritte Lösung.

Spam ohne Plugin entfernen

Wenn ich so etwas entdecke, dann suche ich meistens nach Möglichkeiten dies zu umgehen. Einfach und minimalistisch sollten sie sein, ohne Datenbankaufrufe oder Prozesse die die Performance zu stark beeinträchtigen. Doch was hilft da schon, Spam ist Spam und gerade WordPress ist bekannt für seine Anfälligkeit bzw. dafür, dass Spammer gerne automatisiert zuschlagen und versuchen URLs in den Kommentaren unterzubringen. Als erstes Maßnahme für eine bessere Lösung, deaktivierte ich also erst einmal mein Antispam Plugin. Was folgte war die erwartete Flut an Spam-Kommentaren. Also probierte ich mit Snippets und bekannten Maßnahmen herum, bis es mir gelang, die Spam-Kommentare ohne großartige Performance-Einbußen drastisch zu regulieren. Das Ergebnis ist erstaunlich, denn pro Tag kommen aktuell nur drei oder vier Kommentare durch, die auffällig sind und sich kinderleicht von Hand löschen lassen. Spam-Bekämpfung ganz ohne Plugin, ohne dass es auf die Performance drückt, ohne daraus resultierende Probleme. Wie das geht? Eigentlich ist die Idee ganz einfach.

1. Spam-Falle mit URL-Feld bauen

Der erste Schritt, um den ganzen Spam in WordPress stark einzugrenzen ist, dass URL-Feld in den Kommentaren auszublenden. Einfach löschen macht später Probleme und ist daher keine Hilfe. Blendet es lieber per CSS aus und fügt ein Snippet hinzu, welches dafür sorgt, dass alle Kommentare mit URL einen Fehler angezeigt bekommen. Das Resultat davon ist denkbar einfach: Besucher sehen das URL-Feld nicht, können es also auch nicht ausfüllen. Geschieht das aber trotzdem, muss es sich um einen automatisierten Befehl handeln, also ganz sicher um Spam.

In der comments.php nach dem URL-Feld suchen und folgendes hinzufügen:

style="display:none;"

bei mir sieht das Ergebnis dann so aus:

<input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" style="display:none;" />

Folgendes Snippet in die functions.php einfügen:

function fastwp_validate_comment() {
if( false == empty( $_POST['url']))
wp_die( __('Error: Bitte keine URL angeben.') );
}
add_action('pre_comment_on_post', 'fastwp_validate_comment');

2. Spam-Schutz via htaccess

Das obere Snippet siebt nun gefühlt rund 90 Prozent des WordPress Spams aus, dennoch bleiben täglich eben ein paar Kommentare übrig. Die könntet ihr jetzt ganz leicht per Hand entfernen, doch mit der .htaccess kann der Spam noch weiter eingedämmt werden. So sorgt der folgende Code dafür, dass alle direkten Zugriffe auf die comments.php genauer überprüft werden. Da Spammer keinen korrekten Referer haben, wird ihnen der Zugriff schlichtweg verweigert. Nutzer bekommen davon nichts mit und der Spam wird noch weiter reguliert. Bitte nicht vergessen dort die eigene Website einzutragen, denn sonst kann das Snippet natürlich nicht korrekt funktionieren.

<IfModule mod_rewrite.c> 
RewriteEngine On 
RewriteCond %{REQUEST_METHOD} POST 
RewriteCond %{REQUEST_URI} .wp-comments-post.php* 
RewriteCond %{HTTP_REFERER} !.*EIGENE-WEBSITE.DE.* [OR] 
RewriteCond %{HTTP_USER_AGENT} ^$ 
RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L] 
</IfModule>

3. Spam noch effektiver filtern

Sollte nun immer noch Spam durchkommen, wäre meine Idee diesen noch effektiver zu filtern. Ein Snippet käme mir da in den Sinn, eines welches BB-Code bzw. HTML effektiv erkennt, so dass es, wie bei dem Snippet oben, eine Fehlermeldung gibt, sollte ein Kommentar unerlaubte Tags bzw. Links enthalten. Da ich aktuell aber nicht so genau weiß, wie sich dies effektiv umsetzten ließe und auch niemand in meiner Umgebung gerade eine Idee parat hat, gibt es dafür noch keine Vorlage. Vielleicht fällt euch ja etwas ein, wie BB-Code in einem Kommentar gefiltert werden kann, so dass der Kommentar gar nicht erst durchkommt und direkt blockiert wird. Eigentlich sollten die Schritte oben aber ausreichen, Punkt drei wäre nur noch eine Mögliche Ergänzung, um Spam noch stärker zu blockieren.

Mehr Performance ohne Antispam Plugin

Mit dem Snippet bzw. der Spam-Falle via URL-Feld, habe ich es tatsächlich geschafft, den Spam in WordPress komplett ohne Plugin einzudämmen. Das Resultat ist eine Erweiterung weniger und, laut einigen schnellen Tests, ein paar Millisekunden weniger Ladezeit. So lässt sich die Performance also weiter verbessern. Die paar Spam-Kommentare die dann doch noch durchrutschen, sind auch per Hand schnell entfernt. Es lohnt sich also das Snippet mal auszuprobieren, immerhin ist Ladezeit sehr wichtig und ein paar Millisekunden sind durchaus wertvoll. Ich jedenfalls bin sehr positiv überrascht, dass sich der Spam in WordPress auch ohne Plugin deutlich reduzieren, fast schon komplett abschalten lässt. Für mich ist die Lösung ohne Plugin daher definitiv die bessere Wahl. Allerdings funktioniert das nicht bei jedem Blog, denn gerade größere Websites bekommen so viel Spam, dass ohne Plugin immer noch zu viel durchrutscht. Für kleinere Projekte ist das Ganze aber durchaus interessant.



Wordpress Performance eBook