WordPress - Spambekämpfung, AntiSpam-Plugins

Ansätze zum Schutz vor Foren-/Kommentar-Spam

Jeder, der eine Plattform im Internet betreibt, auf der man irgendwie Texte hinterlassen kann, also Blog-Kommentare oder Foren-Posts, hat mit mehr oder weniger viel Spam zu kämpfen, der größtenteils durch Spam-Bots hereingeschneit kommt. Ist die eigene Seite relativ bekannt und hat eine gewisse Anzahl eingehender Links, so wird die Menge an Spam schnell unerträglich und kann schon mal in die Größenordnung von Hunderten und teilweise sogar Tausenden Einträgen am Tag kommen. Ohne entsprechende automatische Filter wird man dieser Situation nicht mehr Herr. Es gibt einige Ansätze, um wenigstens die Spam-Bots auf Abstand zu halten. Dafür kann man:

  1. das Schreiben nur für angemeldete User ermöglichen.
  2. jegliche Kommentierungsmöglichkeiten nur für Benutzer mit JavaScript-Unterstützung erlauben.
  3. eine Sicherheitsabfrage einbinden, die zumeist über eine aus einem dynamisch erzeugten Bild (Captcha) abzuschreibende Zahlen-/Buchstabenkombination realisiert wird.

Die erste Möglichkeit ist auf den ersten Blick scheinbar die mit Abstand beste, sie hat aber auch einen riesigen Nachteil: es ist damit sehr schwer, eine aktive Community aufzubauen, weil kaum jemand erst lange eine (zeitaufwendige) Registrierung vornehmen möchte. Foren, die relativ lebendig erscheinen, haben da noch halbwegs brauchbare Chancen, private Blogs aber kaum. Derartiges funktioniert allerdings problemlos auf wirklich großen Portalen - nur muss man dieses erst einmal haben ;)
Die zweite Alternative bietet einen sehr wirkungsvollen Schutz, da die allermeisten Bots kein JavaScript beherrschen, weil eine solche Implementation nicht wirklich schnell und einfach realisiert werden kann. Bots mit JavaScript-Unterstützung sind dadurch zum Glück sehr selten und teuer. Echte Besucher, die mit einem Web-Browser kommen und JavaScript deaktiviert haben, gibt es heute kaum noch - nicht zuletzt, weil JavaScript im Normalfall halbwegs sicher ist und sehr viele große Webseiten ohne entsprechende JS-Unterstützung nicht verwendbar sind. Selbst auf proteino.de haben von den echten Besuchern grob geschätzt weniger als 1-2% Javascript deaktiviert und das trotz einem weit überdurchschnittlich hohem Anteil an Linuxusern und ausgefallenen Browsern.
Die dritte Möglichkeit des Spamschutzes mit einer Sicherheitsabfrage über ein dynamisch erzeugtes Anti-Spam-Image ist die mit Abstand beste Lösung und in Kombination mit einer JavaScript-Abfrage aktuell wohl kaum von einem Bot zu knacken. Aber auch das bietet keinen 100%igen Schutz. Desto verbreiteter das entsprechende Plugin oder desto interessanter die Seite bzw. ihre Funktionen, desto wahrscheinlicher ist es, dass irgendwer irgendwann einen Bot schreibt, der die Bilder auswerten kann. Dazu werden die Bilder vom Bot heruntergeladen und durch eine Art OCR-Engine (Schrifterkennung) geschickt. Verwendet man einfache Schriftarten, gleiche Schriftgrößen, immer die gleiche Schriftfarbe und keine störenden Dinge wie zusätzliche Punkte oder Linien, so ist diese Schrifterkennung sehr leicht überwindbar. Ebenso sind Captchas wenig hilfreich, bei denen man aus dem Bildnamen oder irgendwelchen Parametern den Inhalt zurückberechnen kann. Bei einem guten, also schwierigen, Anti-Spam-Bild hat man aber im Normalfall lange Zeit Ruhe und man kann sich durch den regelmäßigen Wechsel des Bildaufbaus (zusätzliche Störinformationen, verschiedene Farben, Schriftarten oder Bildgrößen) zusätzliche Sicherheit verschaffen.

Spambekämpfung im Test

Noch bevor ich dieses Blog hier gestartet hatte, probierte ich kurzeitig das von Strato in den Webhosting-Paketen zur Verfügung gestellte Basic-Blog aus. Das ist ein auf WordPress basierendes Blog, in dem man eigentlich nichts sinnvoll anpassen kann und was ich deshalb noch nicht einmal blutigen Einsteigern für die ersten Gehversuche empfehlen würde. Auf jeden Fall zeigte mir das Mini-Blog aber schon sehr deutlich, dass ich mit reichlich Spam würde fertig werden müssen. Auch ein hier lange Zeit betriebenes Forum (inzw. eingestellt), welches Kommentare ohne Benutzeranmeldung ermöglichte, war trotz der sicherlich nicht sehr großen Verbreitung des Scripts und trotz diverser Anpassungen fleißig zugespammt worden. Deshalb wollte ich bei diesem IT-Blog hier von Anfang an den höchstmöglichen Schutz haben und lieber gar keine Kommentare, als täglich tonnenweise Spam.

Auf dem Blog hier hatte ich in den vergangenen acht Monaten Kommentare nur für registrierte Benutzer zugelassen. Wie das so mit der Bequemlichkeit ist, wollte sich natürlich nie irgendwer registrieren :) Hintergrund für diese restriktive Einstellung meinerseits war, dass ich bei der Einrichtung des Blogs das von mir auch auf anderen Blogs favorisierte Plugin Anti Spam Image von Krazy Nio in der Version 0.3 (letzte mir bekannte Version) nicht auf Anhieb zum Laufen bringen konnte. Dieses WordPress-Anti-Spam-PlugIn nutze ich auf mehreren von mir administrierten Blogs mit insgesamt etwa 1000 Besuchern täglich und dabei kommt selbst auf dem größten dieser Blogs (>600 Besucher pro Tag) nur alle 1-2 Wochen ein Spamkommentar durch, welches wohl per Hand eingetragen wird.

Anpassung des Plugins Anti Spam Image von Krazy Nio

Ich vermutete ursprünglich ein Problem bei den Zugriffsrechten, wollte mich damit aber nicht weiter auseinandersetzen - nun, heute war’s dann doch mal so weit. Ein genauerer Blick in den Seitenquelltext offenbarte das wirkliche Problem: der Link stimmte nicht. Das Plugin wertet offensichtlich die Permalinkstruktur nicht (richtig) aus. Es fehlen gleich zwei wichtige Verzeichnisbestandteile. Zum einen liegt der Blog im Unterverzeichnis /blog/ und zum anderen liegt dieser Blog auf einem Shared-Hosting-Server von Strato, weshalb mir kein mod_rewrite zur Verfügung steht. Demzufolge muß ich mich mit den angepaßten URIs mit eingefügtem index.php/ zufrieden stellen - auch das fehlt bei der Verlinkung des Security-Bildes. Die einfachste Idee zur Lösung des Problems war die Suche nach einer aktuelleren Version - nur leider war die nicht von Erfolg gekrönt, weil die Adresse von Autor und Plugin nicht mehr existieren. Hilft also alles nichts, ich muss in den Code rein.

Die entscheidende Stelle ist die Zeile mit dem label for=”securitycode”. Dort wird als img-src ergänzt durch den variablen Parameter per php ein echo $_SERVER[’PHP_SELF’]; angegeben, was dummer Weise irgendwie nicht hinhaut. Keine Ahnung, ob das ein Problem meiner WordPress-Config ist oder ob diese Umgebungsvariable anderweitig falsch gesetzt wird, jedenfalls ist das Ergebnis das, was man eigentlich nur bei Option 2 unter den Permalink-Einstellungen erhalten dürfte: /YYYY/MM/TT/post_name/. Also gut, man hat somit zwei Möglichkeiten, um an die richtige URL zu kommen:

  1. $_SERVER[”SCRIPT_URI”]
  2. $_SERVER[”SCRIPT_NAME”].$_SERVER[”PHP_SELF”]

Die erste Variante gibt die Domain in der Form http://domainname gefolgt von der internen Adresse aus, also die gesamte URL. Die zweite Variante fügt die Scriptadresse (also im Fall dieser Domain das /blog/index.php) vor dem PHP_SELF ein, womit man als Gesamtergebnis also eine absoluten Pfad (URL ohne den Protokoll und Domain-/Hostanteil) erhält. Diese Lösung würde ich der ersteren Vorziehen, da sie etwas weniger “Quelltextballast” erzeugt. Je nach installierter php-Version und deren Einstellungen kann es unter Umständen erforderlich sein, die verwendeten Umgebungsvariablen je nach Bedarf anzupassen.

Wo ich schon mal dabei war, habe ich auch gleich noch etwas dafür getan, mehr Vielfalt in die AntSpam-Landschaft zu bringen und das Plugin ein wenig erweitert ;) Das von mir angepaßte PlugIn enthält somit neben der obigen Pfadanpassung noch zwei zusätzliche Noise-Alternativen, somit also drei verschiedene und zufällig ausgewählte Störfunktionen. Klar biete ich das Ergbnis hier zum Download an (Lizenz wie bei WordPress allg. üblich GPL):

Download Anti-Spam-Image - erweiterte Version des Plugins von Krazy Nio

2 Reaktionen zu “WordPress - Spambekämpfung, AntiSpam-Plugins”

  1. admin

    Ich habe eben noch einen kleinen Fehler in dem Plugin beseitigt. Mir fiel vorhin bei einer WordPress-Neuinstallation auf, dass das Anti-Spam-Plugin nicht im Adminbereich unter “Plugins” angezeigt wurde. Hier war mir das nicht aufgefallen, da das Plugin ja schon zuvor aktiviert war. Nach ein wenig Suchen bemerkte ich, dass WordPress offensichtlich ein Problem mit meiner Fassung der einleitenden Kommentare hatte - ich glaube, die Doppelpunkte hinter den einzelnen Bezeichnern sind wichtig :mrgreen: Jetzt geht das Plugin jedenfalls und ich habe es auf mehreren unterschiedlichen WordPress-Versionen ab 2.0.4 bis hin zur aktuellen 2.2.1 getestet.

  2. admin

    Es gibt mal wieder eine neue Version (0.6) des Anti-Spam-Plugins. Da ich die Änderungen der letzten beiden Versionen hier nicht kommentiert hatte, hier auch diese noch kurz zusammengefaßt:

    2008-01-23 Möglichkeiten zum Löschen von Kommentaren aus bestimmten IP-Bereichen (Array $badip) sowie von Kommentaren mit spammigen URLs bzw. eMail-Adressen integriert; restlicher Code wurde etwas optimiert; eine brauchbare Fehlermeldung wurde eingebaut, dank der man nach einer Falscheingabe des Anti-Spam-Bildes den Text nicht noch mal neu eintippen muss

    2007-11-02 eine leicht variable Schriftgröße wurde integriert

    2007-09-04 Kommentare dürfen von jetzt an nur noch 2 Links enthalten - Ausnahme: angemeldete User können auch weiterhin beliebig viele Links in Kommentaren unterbringen

Einen Kommentar schreiben