Den Forenspam besiegen

Fast jeder Betreiber eines Forums oder Gästebuchs kennt das Problem: Was zum freien Ideen- und Meinungsaustausch gedacht war, wird auf übelste Weise als Werbefläche von zwielichtigen Anbietern missbraucht. Dieser Artikel soll nun einige Erfahrungen des Autors zur Bekämpfung und Vermeidung dieses Problems aufzeigen.

Das Phänomen ist seit langem bekannt: Was einst als E-Mail- und Newsgroup-Spam begann, hat sich im Laufe der Zeit auch auf Foren, Gästebücher und Wikis übertragen. Das händische Löschen dieser automatisiert eingetragenen Werbebotschaften kann aber schnell zur Sisyphus-Arbeit ausarten. Im folgenden sollen deshalb nun einige Strategien vorgestellt werden, die den Arbeitsaufwand auf ein Minimum reduzieren.

Zuerst sollte man sich fragen: Woher kennen die Spammer mein Forum? Die Antwort ist einfach: Über Suchmaschinen. Mittels Skripten werden Suchmaschinen nach Schlüsselwörten wie z.B. Forum, Gästebuch etc. durchsucht, die gefundenen Formulare zum Schreiben eines Beitrags werden dann von den Programmen ausgefüllt. Daraus ergibt sich ein erster Ansatzpunkt: Ein Formular, das nicht gefunden wird, kann auch nicht ausgefüllt werden. Es sollte also vermieden werden, daß die entsprechenden Eintragsseiten den Suchmaschinen bekannt sind.

Eintragsseiten verstecken

Zum Verbergen der Formulare ergeben sich mehrere Möglichkeiten. Zuerst einmal sollten alle Links zu den Eintragsseiten mit dem Attribut rel="nofollow" versehen werden. Dies weist einen Suchroboter an, den Link nicht weiter zu verfolgen. Ein Verweis könnte als HTML-Code dann etwa so aussehen:

<a href="beitrag-schreiben.php" rel="nofollow">Beitrag schreiben</a>

Zum Zweiten können die Eintragsformulare über die Datei robots.txt für Suchmaschinen gesperrt werden. Die Datei wird in dem Wurzelverzeichnis der entsprechenden Domain abgelegt. Das folgende Beispiel verhindert eine Indexierung der Seite beitrag-schreiben.php und der Dokumente innerhalb des Orders cgi-bin. [1]

User-agent: *
Disallow: /beitrag-schreiben.php
Disallow: /cgi-bin/

Ist die eigene URL den Spammern bereits bekannt, oder werden Suchroboter eingesetzt, die nofollow und robots.txt ignorieren, sind die bereits vorgestellten Maßnahmen allerdings wirkungslos. Nun gilt es, die Spammer zu identifizieren und von der eigenen Website zu verbannen.

Bekannte Spammer aussperren

Forensysteme und Gästebücher speichern üblicherweise zu jedem Beitrag auch die IP-Adresse des eintragenden Rechners. Schaut man sich die Spam-Einträge genauer an, so wird man dort meist Wiederholungen feststellen: Der größte Teil des Spams geht von immer gleichen Servern aus. Nun ist es naheliegend diese Information zu nutzen, und den identifizierten Spammern einfach kein Eintragsformular mehr anzuzeigen bzw. die Verarbeitung der Formulardaten zu blockieren.

Methode 1: PHP

<?php // Listing 1

include_once 'listing2.php';

if(check_ip_blacklist())
{
    // Spammer identifiziert, Meldung ausgeben
    // und Skriptverarbeitung abbrechen

    print 'Ihre IP-Adresse ('.
        $_SERVER['REMOTE_ADDR'].
        ') wurde blockiert';
    exit();
}

// Hier mit der Formularverarbeitung fortfahren

?>

Listing 1 zeigt eine hypothetische Formularseite in der PHP-Code enthalten ist, der Anfragen von bestimmten Servern abfängt.

Nach dem Einbinden des weiter unten beschriebenen Codes aus Listing 2 mittels include_once wird die Funktion check_ip_blacklist() aufgerufen. Diese prüft, ob der anfordernde Rechner in einer Blacklist eingetragen ist. Ein positives Ergebnis wird mit true, ein negatives mit einem Rückgabewert von false angezeigt.

Wurde ein Spammer identifiziert, so wird eine Meldung ausgegeben und die Skriptverarbeitung über exit() abgebrochen. Die Meldung sollte durchaus etwas ausführlicher sein, schließlich könnte die IP-Adresse inzwischen neu vergeben worden sein. Ein Hinweis auf die im Impressum zu findende E-Mail- sowie die blockierte IP-Adresse sollten auf jeden Fall angezeigt werden.

<?php // Listing 2

function check_ip_blacklist()
{
    // Blacklist einlesen
    // (ggf. Dateinamen und -pfad anpassen!)

    $blacklist = file('/pfad/ip-blacklist');

    if(is_array($blacklist))
    {
        // Prüfen, ob IP in Blacklist vorhanden

        $remoteaddr = $_SERVER['REMOTE_ADDR'];
        reset($blacklist);
        while($ent = each($blacklist))
        {
            if(trim($ent[1])===$remoteaddr)
                return true;
        }
    }
    return false;
}

?>

In Listing 2 wird die bereits angesprochene Funktion check_ip_blacklist() definiert. Dieser Code sollte der leichteren Verwendbarkeit wegen in einer Datei innerhalb des PHP-Include-Pfades angesiedelt sein.

Die zu sperrenden IP-Adressen werden aus einer Textdatei eingelesen. Diese ist zeilenweise organisiert, d.h. in jeder Zeile befinden sich genau eine numerische Server-Angabe. Ein Beispiel:

127.0.0.1
127.0.0.2
...

Taucht wiederholt Spam mit der gleichen Absenderadresse auf, so wird diese in die Datei eingefügt. Es genügt meist, die Sperre für einige Tage oder Wochen aufrechtzuerhalten: Die eigene URL wird recht schnell verworfen, wenn von den Spam-Robotern kein Formular mehr gefunden wird.

Methode 2: Apache-Konfiguaration

Sind Eingriffe in eine bereits vorhandene Software unerwünscht, kann die Sperrung auch über Einträge in den Apache-Konfigurationsdateien erfolgen. Das folgende Beispiel zeigt das .htaccess-Equivalent zu der oben angegebenen Textdatei, und wird in dem zu sperrenden Verzeichnis abgelegt: [2]

order deny,allow
deny from 127.0.0.1
deny from 127.0.0.2

Weitere Verfahren

Ein weiteres, häufig eingesetztes Verfahren ist die Eingabe eines Sicherheitscodes durch den Benutzer. Der Sicherheitscode wird dabei als eine für Maschinen unkenntlich gemachte Grafik angezeigt. Nach Ansicht des Autors hat dieser Lösungsansatz aber entscheidende Nachteile: Einerseits eine erhöhte Komplexität und einen gesteigerten Resourcenverbrauch auf dem Server, andererseits werden solche Formulare oft als unkomfortabel empfunden, sehbehinderte Benutzer werden sogar ganz ausgeschlossen.

Fazit

Natürlich gibt es gegen Spam wie immer kein Allheilmittel. Die vorgestellten Techniken können jedoch dazu beitragen, die eigentlichen Inhalte der Website wieder in den Vordergrund zu rücken, und verhindern, daß das Löschen von Spam-Einträgen zur Vollzeitbeschäftigung wird.

Quellenangaben
  1. The Web Robots Pages
  2. Apache 2.0-Dokumentation: Apache Module mod_access

Diesen Artikel im Forum diskutieren