Zum Inhalt springen

Spammern Honig um den Mund schmieren

Irgendwann musste es ja mal passieren, das mit den Spammern. Bisher hatten wir Glück, und so gut wie kein Kommentar-Spam auf unserer Seite, aber als ich letzte Woche mal für eine Stunde die Captcha-Funktion abgeschaltet hatte, hat sich wohl ein Bot für uns interessiert und unsere Seite in seine Datenbank mit aufgenommen. Danach folgten stündliche Spam-Kommentare und unser Captcha half auch nicht mehr. Hier eine kleine Sammlung möglicher Lösungen, um das Spam in Schach zu halten.

Project Honey Pot

Ein kostenloser, open-source Service, der IP-Adressen, über die Spam versendet wurde, sammelt. Durch die Installation eines sogenannten Honey Pots (Honigtopfes) auf deinem Server kannst du mithelfen, neue Spammer zu identifizieren. Das wirklich Schöne ist, dass es auch ein API (http:BL) gibt, dass man sehr einfach abfragen kann, um zu erfahren, ob eine bestimmte IP-Adresse ein möglicher Spammer ist.

Hier ein kleines PHP Script, das zeigt, wie eine Abfrage erfolgen kann. Einen eigenen API-Key kann man sich bei projecthoneypot.org nach der Registrierung kostenlos besorgen.

<?php
$apikey = 'DEIN API-KEY';
function honeypot($apikey, $ip) {
    list($first, $days, $score, $type) = explode('.',gethostbyname($apikey . '.' . implode('.', array_reverse(explode('.',$ip))) . '.dnsbl.httpbl.org'));
    return ($first == 127 && $type != 0);
}
$is_spammer = honeypot($ip);
?>

Wenn $is_spammer den Wert 1 zurückliefert, wurde die IP-Adresse als Spammer identifiziert. Wenn nichts zurückgeliefert wird, ist die IP-Adresse sauber, oder bis jetzt nicht als Spammer bekannt. Um die IP-Adresse zu ermitteln, kann man als Teil eines Formulars, folgenden Code verwenden. Sie fügt ein verstecktes Feld zum Formular hinzu, das die IP-Adresse des Besuchers oder Kommentators an das obige Script übermittelt.

<?php
    $ip = isset($_SERVER['HTTP_X_FORWARDED_FOR']) ? $_SERVER['HTTP_X_FORWARDED_FOR']:($_SERVER['REMOTE_ADDR']);
    echo '<div><input type="hidden" value="'.$ip.'" name="ip" /></div>';
?>

Andere Blacklist-Anbieter befragen

Die Abfrage über das http:BL API von projecthoneypot.org ist zwar sehr gut, kann aber keinen 100-prozentigen Schutz bieten. Vermutlich kann das kein Skript. Um Spammer zu fangen, die dem Honigtopf entkommen sind, können die Datenbanken von sogenannten Blacklists zusätzlich noch abgefragt werden. Das folgende Script verwendet drei sehr bekannte Blacklist-Anbieter (und vor allem jene, die eine schnelle Antwortzeit haben). Einen API-Key oder eine Registrierung bei den Blacklist-Anbietern ist bei dieser Abfrage nicht nötig.

<?php
function check_dnsbl($ip) {
    $dnsbl_check=array('sbl.spamhaus.org','xbl.spamhaus.org','dnsbl.sorbs.net');
    if ($ip) {
        $rip=implode('.',array_reverse(explode(".",$ip))); 
        foreach($dnsbl_check as $val){
            if(checkdnsrr($rip.'.'.$val.'.','A'))
                return true;
        }
    }
    return false;
}
$is_spammer = check_dnsbl($ip);
?>

Die Dummheit besiegen

Eine weitere sehr einfache, aber sehr effektive Maßnahme, die die Dummheit der Spambots ausnutzt, besteht darin ein verstecktes Feld in das Formular einzubauen, das für normale Besucher nicht sichtbar ist. Die meisten Bots, analysieren das CSS einer Website nicht und so sehen sie auch Felder, die ein Mensch nicht sehen würde. Diese Tatsache können wir verwenden, um den Spammer auszutricksen. Liefert dieses verstecke Feld einen Wert, kann man davon ausgehen, dass dies nur ein Spammer sein kann. Somit kann dann der Kommentar effektiv und unkompliziert geblockt werden.

Captchas bringen nichts

Captchas gibt es viele, von Grafik-Captchas mit Buchstabensalat in verschiedenen Verformungen, bis hin zu Rechenaufgaben, banale Textfragen oder andere Varianten, die irgendeine menschliche Interaktion verlangen. Sicher ein Captcha ist immer noch besser als gar keinen Schutz, hat jedoch ein Spambot einmal herausgefunden, wie das Captcha zu lösen ist, ist sämtlicher Schutz verloren. Dann kann man versuchen das Captcha noch komplizierter zu gestalten, muss aber damit rechnen die armen Benutzer zunehmend zu nerven, um dann irgendwann festzustellen, dass der Spambot auch die neue Lösung geknackt hat. Weniger ist mehr, auch wenn das Wenige eigentlich mehr ist ;)

Fazit

Seitdem ich auf die hier beschrieben Schutzmechanismen umgestellt habe, ist wieder Ruhe in der Kiste. Ab und zu schaue ich in die Logs rein und freue mich über die geblockten Versuche. Ich hoffe die Ruhe hält an, ansonsten gibt es hier ein entsprechendes Update.


Kommentiere diesen Artikel

Kommentar (erforderlich) (keine Anzeige) (optional)
Ja, erkenne mich, wenn ich das nächste mal hier bin