Fight against Spam – Nemesis

Don't feed the BotsWir haben den Spam hier auf F!XMBR mittlerweil sehr gut im Griff. Automatisierter Spam kommt so gut wie gar nicht mehr durch, manchmal noch ein paar per Hand abgesetzte Kommentare, die einfach nur ihren Link loswerden wollen. Ein kleiner Knopfdruck im ACP und auch die Sache ist dann gegessen. Lang ist es her, seit dem letzten Artikel Fight against Spam — The next Generation – so dass mal wieder eine Aktualisierung notwendig war. Auch wenn viele Maßnahmen noch die alten sind, so haben sie sich als simpel aber doch wirkungsvoll entpuppt. Nachdem sich herausgestellt hat, dass das Math Comment Spam Protection Plugin immer wieder Ärger gemacht hat, es bei wenigen Usern dafür gesorgt hat, dass diese nicht rechnen kommentieren konnten, musste eine Alternative her. Wir setzten dabei auf ein recht neues und bisher eher unbekanntes Plugin. Die Idee zu dem guten Stück war hervorragend, die Ausführung noch viel besser.

Wovon die Rede ist? Vom Yawasp — Yet Another WordPress Anti Spam Plugin. Im Wesentlichen ordnet es den Kommentarfeldern (Name, E-Mail und URL) vom Standard abweichende IDs zu. Es gibt ein verstecktes zusätzliches Feld, welches die ID Author bekommen hat. Wenn nun also ein Bot die Felder ausfüllt, wird er den Namen ins Feld mit der ID Author eintragen – und schon hat er verloren. Die zufälligen IDs ändern sich zudem alle 24 Stunden. Damit werden auch die letzten Bots ausgeschlossen, die überhaupt noch bei uns durchkommen. Schwer haben sie es schon per se.

Wir haben es von Anfang an abgelehnt, die bekannten mächtigen Tools einzusetzen. Die funktionieren zwar mehr oder weniger, aber wer will schon jeden Tag den Spam-Ordner durchsuchen, ob nicht doch false positives darunter sind. Hinzu kommt, dass bei manchen Tools die Kommentare mit Datenbanken verglichen werden, sprich: Da wird dann jeder Kommentar mal eben durchs Netz gejagt um ihn abzugleichen. So gehen wir nicht mit den Kommentaren unserer Besucher um.

Ich glaube nicht, dass folgende Punkte ausschließlich etwas für Technikfreaks sind – es sind nur wenige, einfache Handgriffe. Fast jeder Blogger wird schon einmal in eine HTML– oder PHP-Datei reingeschaut haben. Mehr Erfahrung ist fast nicht notwendig. Wir unterscheiden hier auf F!XMBR 3 Sorten von Spam:

  1. Menschlicher Spam
  2. Bots (automatisierter Spam)
  3. Sonstiger Spam

1.) Menschlicher Spam

Menschliche Spammer lassen sich naturgemäß ganz schlecht bekämpfen, weil sie augenscheinliche Maßnahmen locker umgehen können, so bleiben uns nur restriktive Maßnahmen im WordPress-Backend. Unter Einstellungen — Diskussion haben wir folgende Einstellungen vorgenommen:

Bevor ein Kommentar erscheint,
[x] muss jeder Kommentar von einem Administrator überprüft werden.

Diese Einstellung ist insbesondere dem Umstand geschuldet, dass hier immer wieder Kommentatoren aufschlagen, die rechtswidrige Kommentare absetzen – per Copy & Paste auf anderen Blogs abgemahnte Kommentare hier veröffentlichen wollen. Nun könnte man dem mit der Blacklist entgegen wirken, das wurde dann aber zu viel Arbeit und zu unübersichtlich. Natürlich stört das den Diskussionsfluss – doch wer ernsthaft an einem Thema interessiert ist, wird sich nicht davon aufhalten lassen, wenn ein Kommentar mal zwei Stunden auf die Freischaltung wartet.

2.) Bots (automatisierter Spam)

Das Hauptaugenmerk liegt selbstverständlich auf den Bots, die das Netz abgrasen, die Blogs dieser Welt crawlen — das geschieht automatisiert, millionenfach pro Tag — wir hatten z. B. Techcrunch mal einen Pingback geschickt, d. h. er wurde automatisch versendet. Kurze Zeit später wurde der betreffende Artikel bei uns massenhaft attackiert. Unterscheiden kann man den automatisierten Spam wie folgt:

  1. Kommentar-Spam
  2. Trackback-Spam

a.) Kommentar-Spam

Automatisierten Kommentar-Spam fangen wir hier auf F!XMBR wie oben schon beschrieben ab. Nach dem Math Comment Spam Protection-Plugin wurde es Yawasp — Yet Another WordPress Anti Spam Plugin. Der menschliche Besucher merkt von dieser Maßnahme rein gar nichts. Er kann wie gewohnt kommentieren, kann sicher sein, dass sein Kommentar nicht durch die Weltgeschichte geschickt wird, muss keine Rechenaufgabe lösen oder gar ein Captcha entziffern. Eine bessere Lösung gibt es derzeit meines Wissens nicht.

b.) Trackback-Spam

Trackbacks, Pingbacks — eine feine Entwicklung, allein durch das, was sie ausmacht, sind sie selbstverständlich mehr als nur anfällig, um von den Spammern dieser Welt angegriffen zu werden. Dazu zähle ich im Übrigen auch die ganzen Pingdienste, die auch stark ausgenutzt werden. Wenn z. B. der SPIEGEL oder andere sogenannte Newsseiten Technorati anpingen, ist das in meinen Augen profaner Spam — haben die genannten (und zig andere) doch soviel mit dem Bloggen zu tun, wie ich mit dem Stricken. Schleicht Euch. :)

Das aber nur am Rande. Zurück zum eigentlichen Problem, dem Trackback-Spam: Wir haben hier mittlerweile mehrere Maßnahmen ergriffen, die sehr gut wirken. Bots greifen z. B. im Regelfall die wp-trackback.php im WordPress-Root-Verzeichnis direkt an. Das kann man leicht unterbinden:

b.1.) Wir benennen die wp-trackback.php um

Natürlich kann das nicht einfach so gemacht werden, hier sind Eingriffe im Code notwendig. Öffne die /wp-includes/template-loader.php und suche (Zeilen 15 & 73) zweimal nach:

include(ABSPATH . ‘wp-trackback.php’);

Ersetze es jeweils mit:

include(ABSPATH . ‘wp-trackback_neu.php’);

Öffne die /wp-includes/comment-template.php und suche (Zeile 672) nach:

$tb_url = get_option(‘siteurl’) . ‘/wp-trackback.php?p=’ . $id;

Ersetze es mit:

$tb_url = get_option(‘siteurl’) . ‘/wp-trackback_neu.php?p=’ . $id;

Jetzt kann die wp-trackback.php im Root-Verzeichnis in wp-trackback_neu.php umbenannt werden.

b.2.) Das direkte Ansteuern der wp-trackback.php per .htaccess unterbinden

Dazu reicht folgender Eintrag in der .htaccess-Datei:

RewriteEngine On
RewriteRule ^wp-trackback\.php.*$ — [F,L]

mod_rewrite muss natürlich auf dem Server aktiviert sein, ebenso müssen wir Zugriff auf die .htaccess haben. Das ist nicht bei allen Webpaketen der Fall.

Zusätzlich sind bei uns 2 Plugins im Einsatz — Moderate Pingbacks & Moderate Trackbacks. Auch mit diesen Plugins haben wir sehr gute Erfahrungen gemacht.

Eine weitere Form des Trackback-Spams:

Die Bots crawlen die Artikel-URLs, hängen bekannte Formen der Trackback-Permalinkstruktur an und dann heißt es Feuer frei. Sind diese Bots erstmal losgelassen, und haben uns entdeckt, herrscht keine Ruhe mehr. Unser E-Mail-Client meldet dann im Minuten-Takt, oder wie oft man die Mails auch abruft, neue Kommentare zum Freischalten. Und diese letzte Form ist durchaus die erfolgreichste Methode der Spammer. Ich habe lange überlegt, einfach den Permalink der Trackback-URL zu ändern, ich konnte mir nicht großartig vorstellen, dass es etwas bewirkt. Doch die Bots sind wirklich so dumm, einfach nur schlecht programmiert. Bei uns hängt zur Zeit ein track_fix hintendran — es wirkt, die Bots bleiben außen vor. Es lässt sich ganz einfach lösen.

Suche in der /wp-includes/comment-template.php (Zeile 670) nach:

$tb_url = trailingslashit(get_permalink()) . user_trailingslashit(‘trackback’, ‘single_trackback’);

Ändere es in:

$tb_url = trailingslashit(get_permalink()) . user_trailingslashit(‘track_fix’, ‘single_trackback’);

Suche in der /wp-includes/rewrite.php (Zeile 1260) nach:

$trackbackregex = ‘trackback/?$’;

Ändere es in:

$trackbackregex = ‘track_fix/?$’;

Nun noch im ACP unter Einstellungen — Permalinks und einfach die auf Permalink-Struktur aktualisieren. Schon ist die neue Permalinkstruktur aktiv, Bots bleiben außen vor. Natürlich wollen wir unseren Besuchern diese neue URL mitteilen – doch wie, war die Frage, bekommen die Bots diese dann auch gleich auf den Präsentierteller mitgeliefert.

Wir haben dann dank Mithilfe von Carsten die Entscheidung getroffen, die Trackback-URL per Javascript zu verstecken. Bots sind einfach mal blöd und können kein Javascript, und schon ist das Problem gelöst. Der Javascript-Eintrag sieht wie folgt aus: Öffnet die Datei /wp-content/themes/euer_theme/single.php (oder die sidebar.php, je nachdem, wo Ihr die Trackback-URL in Eurem Theme einsetzen wollt) und fügt am Anfang folgenden Code ein:

<script type="text/javascript">
//<![CDATA[
function trackback_spam() {
parentelem = document.getElementById("whateveryouwant");
if (document.getElementById("track_fixmbr")) { remove_spam(); }
var innerelement = document.createElement("textarea");
innerelement.setAttribute("readonly","readonly");
innerelement.setAttribute("id","track_fix");
innerelement.setAttribute("onclick","this.form.track_fix.select(); this.form.track_fix.focus();");
elementtext = document.createTextNode('<?php echo get_permalink() ?>track_fix/');
innerelement.appendChild(elementtext);
parentelem.appendChild(innerelement);
}
function remove_spam() {
var d = document.getElementById("whateveryouwant");
var fixmbr = document.getElementById("track_fix");
d.removeChild(fixmbr);
}
//]]>
</script>

Die Verlinkung selbst zum Aufklappen der Trackback-URL (siehe auch rechts, Sidebar) sieht dann wie folgt aus:

<a href="javascript:trackback_spam();">Trackback-URL anzeigen lassen (Javascript on)</a>
<form action="#" id="whateveryouwant">
</form>

Damit ist die Trackback-URL geändert und auch verlinkt, unseren Lesern mitgeteilt, Bots bleiben außen vor. Kleinere Nachteile sollen natürlich nicht verschwiegen werden:

  • Javascript ist nicht jedermanns Sache. Muss man auf F!XMBR aber mit leben. Lieber F!XMBR in eine Whitelist eintragen, als dass wir Eure Kommentare quer durchs Netz zum Abgleich zu einem (fremden) Server schicken. 😉
  • Manche Leute verlinken die Trackback-URL anstelle sie nur anzupingen, bei Änderung der URL führen manche Links ins Leere. Gut, das kann man nicht ändern — wer so deppert ist, die Trackback-URL zu verlinken, anstelle sie dafür zu nutzen, wozu sie da ist, hat selbst schuld. Die Leute müssen damit leben, dass ihre Links ins Leere laufen.
  • Es muss bei jedem WordPress-Update neu eingepflegt werden, zumindest die Änderungen in der comment-template.php und der rewrite.php. Zudem kann es passieren, wenn Fehler geschehen, dass Trackbacks und Pingbacks gar nicht mehr funktionieren. Das sollte man auch auf jeden Fall nach der Änderung kontrollieren. Lasst Euch einfach von einem befreundeten Blog ein Pingback und ein Trackback schicken.

Damit haben Crawler keine Möglichkeit mehr, die Trackback-URL auszuspähen, es sei denn, irgendwann entschlüsseln sie die Javascript-Zeilen, was nicht wirklich schwer ist, aber auf der anderen Seite doch zu individuell, um es ernsthaft in die Programme einzubauen. Das war es dann auch schon zum Trackback-Spam. Natürlich kann man zusätzlich noch bekannte Spam-Server per .htaccess und deny from aussperren — dazu gleich auch mehr — doch Trackback-Spammer bleiben nun außen vor.

3. Sonstiger Spam

Unter sonstigen Spam haben wir einsortiert:

  1. Referer-Spam
  2. Spam bekannter Server
  3. Kontaktformular-Spam
  4. Sonstiges

a.) Referer-Spam

Es gibt Blogs — und auch ganz normale Seiten — die veröffentlich auf einer extra Seite ihre Referers. Und wenn man da reinkommt, hat man einen Backlink ergattert — und man kann auf Zulauf von der betreffenden Seite hoffen. Sehe ich in unserer Statistik so einen Referer, kommt gleich die .htaccess zum Einsatz — ein kleiner Auszug:

RewriteEngine On
RewriteCond %{HTTP_REFERER} ^.*xyz.de.*$ [OR]
RewriteCond %{HTTP_REFERER} ^.*zyx.de.*$ [OR]
RewriteCond %{HTTP_REFERER} ^.*abc.de.*$ [OR]
RewriteCond %{HTTP_REFERER} ^.*cba.de.*$ [OR]
[…]
RewriteRule .* — [F]

b.) Spam bekannter Server

Um einschlägig bekannte Seiten (siehe auch a) gänzlich auszusperren hilft folgender Eintrag (es kommen vom jeweiligen Server dann auch keine Trackbacks mehr an):

Order Deny,Allow
deny from 213.203.193.143
deny from 213.203.193.163
deny from 213.131.229.234
deny from 195.20.225.22
deny from 82.165.79.246
deny from 66.249.16.207
[…]

Man kann also auch gegen diese Art Spam viel tun. Doch gerade bei den ganzen amerikanischen und asiatischen Seiten ist auch viel Kreativität gefordert. Ich, z. B. hatte die Nase voll: Jeglicher Referer, die Zeichenfolge poker enthält, landet nun auf der 403. Sonst kann es irgendwann vorkommen, dass das Ganze zur Lebensaufgabe wird. Das ist dann schon sehr restriktiv und kann auch mal normale Seiten treffen. 😉

c.) Kontaktformular-Spam

Der normale User bekommt es nicht mit, aber auch die auf den Blogs sehr oft eingesetzten Kontaktformulare werden ebenso angesteuert, und dann trudeln die Mails mit nice site — oder so ähnlich — ein. Doch auch hier gibt es Abhilfe. Wir setzen das Plugin WP Contact Form III ein. Wer uns nun eine Nachricht zukommen lassen will, muss ein von uns bestimmtes Wort eingeben – per Hand und schon schauen Bots in die Röhre. Derzeit ist es F!XMBR. 😉

d.) Sonstiges

Es gibt immer wieder Seiten, die leben vom Contentdiebstahl. Als Beispiel seien hier die NPH-Proxies genannt. Ich empfehle da auch immer, das Forum von Abakus im Auge zu behalten — wenn man mal das ganze Marketing– und SEO-Gequatsche außer Acht lässt, und nur die Informationen mitnimmt. Eine ellenlange Liste mit NPH-Proxies schaut z. B. so aus:

# NPH-Proxy’s 24.09.2006 Start
RewriteCond %{HTTP_HOST} !^www\.fixmbr\.de$
RewriteRule ^(.*)$ http://www.fixmbr.de/$1 [L,R=301]
RewriteCond %{REMOTE_ADDR} ^24\.169\.129\.239$ [OR]
RewriteCond %{REMOTE_ADDR} ^38\.100\.31\.31$ [OR]
RewriteCond %{REMOTE_ADDR} ^62\.75\.222\.63$ [OR]
[…]

Das war es auch schon. Sehr viel Text, und doch sinnvolle Maßnahmen. F!XMBR ist mittlerweile nicht ganz unbekannt – und Ziel mancher Angriffe. Wir setzen kein großes, überkandideltes Anti-Spam-Tool ein und haben die Spam-Problematik trotzdem im Griff. Das ist schon ein großer Erfolg. Ich hoffe nicht, dass wir irgendwann mal sagen müssen, wir geben auf, Spam Karma wurde gerade installiert. Doch bis dahin ist noch ein ganz langer Weg und wir haben noch viele Pfeile im Köcher. 😀

, , , , , ,

8 Antworten zu “Fight against Spam – Nemesis”

  1. Gegen Trackback-Spam funktioniert bei uns Simple Trackback Validation zuverlässig.

    Das Plugin prüft zunächst, ob der Trackback überhaupt von dem Server kommt, auf den der Trackback-Link verweist. Bei fast allen Spam-Trackbacks ist dem nämlich nicht so.

    Im Fall einer Übereinstimmung wird geprüft, ob die per Trackback angepriesene Seite einen Link zum Artikel enthält. Nur dann kommt der Trackback durch.

    Masochisten können den ausgefilterten Schrott in die Moderationsschleife sortieren lassen, unentschlossene lassen ihn unter Spam ablegen. Nachdem zwei Jahre lang kein «false positive» aufgetreten ist, wandert der Müll bei uns inzwischen direkt in die ewigen Jagdgründe.

  2. Chris sagt:

    Kenne ich brauchen wir nicht, darum nie eingesetzt…

  3. Sebastian M. sagt:

    Auch wenn das wie Spam aussieht, einfach «Danke!».
    Genauer: So einfach und genau beschrieben habe ich das selten gelesen. Und es hilft mir gerade, bei einem künftigen Blog gleich die richtigen Vorkehrungen zu treffen.

  4. Knut sagt:

    Das eine oder andere werde ich sicherlich bei «uns» auch umsetzen. Bisher kommt zwar kaum was an, das soll aber auch so bleiben.
    Danke für die Tips

  5. Es war auch weniger als Tipp für Euch gemeint, Chris, sondern für jene Leser von F!XMBR gedacht, die es nicht gewohnt sind, nach jedem Update von WordPress erst mal den neuen Code zu patchen und zu der Syntax von mod_rewrite ein weniger inniges Verhältnis haben, als zu ihrer Muttersprache.

  6. DonTermi sagt:

    Die Methode mit den dynamischen Formularnamen habe ich bei uns im Shopsystem mal fix nebenbei beim Beratungsformular umgesetzt. Seitdem kommt da nicht ein einziger SPAM mehr durch :) Danke für den tollen Denkanstoß.

  7. Yuri sagt:

    @Fellow Passenger: Ich habe es mal mit Simple Trackback Validation probiert, da es an sich ganz vernuenftig klang, mit dem Ergebnis, dass man mir dann keine Trackbakcs mehr schicken konnte [habe es nur bemerkt, weil mich jemand netterweise drauf hingewiesen hat]. Daher habe ich’s dann wieder abgeschaltet.

  8. […] Yawasp war unser bisheriger Spam-Terminator — einfach und effizient. Nachteil von diesem jedoch war der notwendige Eingriff in den Code — nicht die Welt, jedoch ein Hort möglicher Inkompatiblitäten. Eine dieser Inkompatiblitäten schlug beispielsweise bei dem hier eingesetzten Theme für mobile Geräte zu, WordPress Mobile. Eine händische Anpassung wäre auch dort von nöten gewesen. NoSpamNX, der designierte Nachfolger von Yawasp, jedoch kommt ohne diese Eingriffe aus und sollte im Prinzip die ihm gestellte Aufgabe mit Bravour erfüllen. […]

RSS-Feed abonnieren