Flattr

Social

Plugins

Apps

Lab

Kategorien

30. Dezember 2011 / Closed

Spamfrei Bloggen unter WordPress: Wenige Handgriffe genügen

Spam nervt! Nicht nur in Form einer E-Mail im heimischen Posteingang, auch beim täglichen Bloggen: Gutbesuchte Blogs mit zahlreichen ...

Spam nervt! Nicht nur in Form einer E-Mail im heimischen Posteingang, auch beim täglichen Bloggen: Gutbesuchte Blogs mit zahlreichen Backlinks werden minütlich mit automatisiert generierter Werbung bombardiert. Antispam-Plugins wie Akismet sind eine mehr oder weniger zuverlässige Unterstützung beim Ausfiltern der Schädlinge unter WordPress. Doch die beim Durchstöbern der markierten Beiträge verlorene Zeit ist zu schade und kann meist besser investiert werden.

WordPress Blogs sind leichte Beute
An sich haben die Spammer es einfach: Websites auf WordPress Basis sind anhand der Ordnerstruktur leicht zu identifizieren und zweitens hat die Datei, welche Kommentare in die Datenbank schreibt, einen fest vergebenen Namen bzw. Pfad. Penetrante Roboter werden also so justiert, dass sie nichts anderes brauchen, als diese Datei mit Daten zu beschießen. Und so wird der Blogger indirekt gezwungen, Schutzmechanismen wie Captcha einbinden (und somit dem Kommentator einen Grund mehr geben, nicht zu kommentieren) oder auf Akismet setzen und aussortierte Kommentare täglich kontrollieren.

Nachfolgend wird eine effektive Lösung vorgestellt, die manuell durchzuführen ist. Das Prinzip dahinter: Es wird eine neue Datei für die Speicherung der Kommentare angelegt. Die alte wird stillgelegt und kann von Spammern nicht mehr missbraucht werden. Um sich auf diese Art schützen zu lassen, sind lediglich 3 Schritte notwendig.

1. Action-Datei duplizieren
wp-comments-post.php aus dem Blogverzeichnis in den Ordner des verwendeten Theme kopieren (sie verbleibt auch nach einem WordPress Upgrade hier). Nach dem Kopiervorgang die Datei im Zielordner nach Wünschen umbenennen. Exemplarisch wurde das File in comments-post.php umbenannt. Dieser Schritt sorgt gleich für zwei bedeutende Vorkehrungen: Der Pfad und die Namenbezeichnung des Kommentarauslösers sind anders und den Bots völlig unbekannt, da abweichend vom Standard.

Für eine fehlerfreie Ausführung der kopierten Datei ist eine wichtige, jedoch winzige Richtigstellung notwendig. In der Zeile 16 gehört der Pfad zu wp-load.php abgestimmt: In unserem Beispiel lautet der Pfadverweis ../../../wp-load.php.

Alter Funktionsaufruf

require( dirname(__FILE__) . '/wp-load.php' );

Neuer Funktionsaufruf

require('../../../wp-load.php' );

2. Pfad im Template anpassen
Die für das Speichern des Kommentars zuständige Datei ist nun eine andere, also muss im Template comments.php auch der Action-Pfad angepasst werden. Dazu wird das besagte Template im Text-Editor geöffnet und das ACTION-Attribut im einzig dort vorhandenen FORM-Tag (im Default-Theme des WordPress 2.7 ist es Zeile 63) um den neuen Pfad der comments-post.php modifiziert. Somit wird dem Formular signalisiert, welche Datei nun nach dem Absenden des Kommentars für die Speicherung der Daten zuständig ist.

Alter Pfad des Action-Aufrufs

<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post ...

Neuer Pfad des Action-Aufrufs

<form action="<?php bloginfo('template_url'); ?>/comments-post ...

3. Stilllegung des Originals
Bereits seit Generationen ist die Datei wp-comments-post.php im Hauptverzeichnis des Blogs für die Speicherung der Kommentarbeiträge unter WordPress verantwortlich. Und das wissen die Roboter. Diese Datei wird nicht mehr länger verwendet, da sie woanders hinkopiert wurde. Also wird sie mittels 4 Zeilen Code in .htaccess von außen unerreichbar gemacht und kann keine Anfragen mehr entgegen nehmen. Eigentlich würde auch das Löschen der Datei ausreichen, allerdings würde sie beim nächsten, automatischen WordPress Update wieder vorhanden sein und eine Lücke darstellen.

Sperrung in .htaccess

<FilesMatch "wp-comments-post.php">
Order allow,deny
deny from all
</FilesMatch>

Nicht einfach, aber auch nicht kompliziert
Auch wenn die Lösung auf den ersten Blick sehr komplex ausschaut, ist sie es überhaupt nicht. An sich müssen nach dem Kopieren an zwei Stellen die Pfade richtig gesetzt werden. Falls jemand keinen Zugriff auf die – nicht selten ausgeblendete – .htaccess hat, kann die wp-comments-post.php im Root-Verzeichnis schlicht und einfach umbenennen. Beim Upgrade des Blogsystem aber dran denken…

Wie sicher ist sicher?
Sicher kann es passieren, dass mit der Zeit der umgestellte Pfad entdeckt und dem Spam-Robot manuell hinzugefügt wird. Mit der Zeit, vielleicht…

Update vom 3. Januar 2009
Ab sofort steht eine effektivere Lösung in Form eines WordPress-Plugin zur Verfügung. Dabei sind keine manuellen Schritte erforderlich.
» Antispam Bee: Das WordPress-Plugin für den Schutz gegen Spam

Sergej Müller

[Der Autor]Sergej Müller ist enthusiastischer Software Engineer mit Schwerpunkten Webentwicklung, Apps und WordPress. Seit 2007 programmiert und vertreibt er wpSEO, das zugkräftige SEO-Plugin für WordPress-Blogs.