Sprung zum Inhalt [/] Tastaturkürzel / Accesskeys [0]

Webdesign nach Maß von webdesign weisshart

Formular- / Kommentar-Spam - und was man dagegen tun kann

Die Kommentarfunktion von Blogs wird von Spammern gerne für ihre Machenschaften mißbraucht.
Was kann man dagegen tun?

Zuerst einmal muß man unterscheiden zwischen manuellen Einträgen, und automatisierten Einträgen. In diesem Artikel geht es um die Möglichkeiten, automatische Einträge zu erkennen und zu verhindern.

Hier eine - unvollständige - Liste bekannter Verfahren:

1. Die Zeitdauer für das Ausfüllen und Absenden des Formulars messen

Diese Methode macht sich den Umstand zunutze, dass Kommentarformulare von Automaten sehr viel schneller ausgefüllt werden, als dies je ein Mensch könnte. Kein Mensch wird in weniger als z. B. 10 Sekunden ein komplettes Formular erfassen, mit vernünftigen Eingaben ausfüllen, und abschicken.
Zusätzlich wird noch eine Maximalzeit von z. B. 10 Stunden vorgegeben. Wozu das? Manche Bots verschicken Ihren Spam zeitversetzt, warum auch immer.

In vielen Fällen genügt allein diese Methode, um bis zu 99% Spamschutz zu erzielen.

Die Methode ist verblüffend einfach anzuwenden, und erfordert nicht einmal SESSIONS.

  1. Ins Formular selbst wird mit PHP ein zusätzliches, verstecktes Feld eingebaut:
    <?php
      echo '<p><input name="date" type="hidden" value="', time(), '" /></p>';
    ?>
  2. Und jetzt dort, wo die übergebenen Formulardaten überprüft und ausgewertet werden, noch folgende, zusätzliche PHP-Abfrage einfügen:
    if (isset($_POST['date']) && is_numeric($_POST['date'])) {
       $posted = intval($_POST['date']);
       $sendezeit = (time() - $posted);
       if ($sendezeit < 10 || $sendezeit > 36000) {

       $text = "Gerade wurde der Kommentar in $sendezeit Sek. zugespammt\n
       Absender: $email\n
       Text: $comment";

       mail('mail@example.com', 'Kommentarspam', $text);

       die("no spam here!");
     }
    }

Anmerkungen:
1.Die Angabe $sendezeit > 36000 sperrt Kommentare aus, die zeitversetzt, unabhängig vom Aufruf des Formulars gesendet werden. Ein ebenfalls typisches Kennzeichen für Spambots.
2. mail@example.com: an diese E-Mail Adresse wird bei jedem abgewehrten Spamversuch eine Nachricht geschickt.

2. Versteckte Formularfelder, die nicht ausgefüllt werden dürfen - Honeypot

Spambots füllen alle Felder eines Formulars aus. Dabei versuchen sie, die Felder mit jeweils passenden Inhalten zu befüllen. Ein Feld namens E-Mail z. B. wird daher mit großer Wahrscheinlichkeit mit einer - natürlich gefälschten - E-Mail Adresse gefüllt.
Diese Eigenschaft der Spambots kann man sich zunutze machen, indem man zusätzliche Felder ins Formular einfügt, die von Menschen nicht ausgefüllt werden. Zu diesem Zweck werden die Zusatzfelder per CSS vor Menschen versteckt, und für den Fall, dass der Besucher CSS deaktiviert hat, noch ein entsprechender Hinweis angebracht.

  1. Das zusätzliche versteckte Feld:
    <span style="display:none">
       <label for="email">Das folgende Feld muss leer bleiben:</label>
       <input type="text" name="email" id="email" title=" dieses Feld muss leer bleiben " />
    </span>
    Anmerkung: Besser als die inline-CSS Angabe display:none ist sicher, dem span eine Klasse zuzuweisen, und hierfür display:none in einer externen CSS Datei zu deklarieren.
  2. Die entsprechende Abfrage per PHP:
    <?php
       if ($_GET["email"] != "") {
         echo "<p>Sie haben ein Feld ausgefüllt, das leer bleiben muss. Bitte gehen Sie mit der Zurück-Funktion Ihres Browsers zurück.</p>";
         exit;
       }
    ?>

Alleine angewandt, eignet sich diese Methode auch für Formulare, die unter Umständen auch von Menschen sehr schnell ausgefüllt werden, z. B. ein Suchformular. (Ja, selbst Suchformulare sind vor den Spambots nicht sicher.) In Kombination mit der vorgenannten Zeit-Methode dürfte ein sehr guter Spamschutz zu erreichen sein.

Nachteil dieser Methode: Besucher ohne oder mit deaktiviertem CSS (z. B. einige Screen Reader, eventuell auch abhängig von User-Einstellungen) werden durch scheinbar unnötige, zusätzliche Formularfelder und die entsprechenden, notwendigen Erklärungen belästigt.

3. Die Beantwortung einer logischen Frage - z. B. einer Rechenaufgabe

Eine einfache Rechenaufgabe, oder eine einfache, logische Frage (z. B.: ist ein Mann männlich oder weiblich) muss gelöst, und die richtige Antwort in ein zusätzliches Formularfeld eingegeben werden.

Die Programmierung sollte kein Problem sein. Falls per Zufallsgenerator wechselnde Fragen gestellt werden, kann die Übergabe des richtigen Ergebnisses bequem mit einem hidden field wie bei Methode 1 erfolgen.

Der Nachteil dieser Methode liegt auf der Hand. Sie ist einfach lästig.

4.Einen (verfremdeten) Code in Bildform abfragen - CAPTCHAs

Eine Erklärung des Verfahrens erübrigt sich. Jeder kennt diese lästigen verzerrten Codebilder. Und wohl jeder hat sich schon darüber geärgert, dass er das Gekritzel nicht entziffern konnte; und mancher hat vielleicht sogar nach dem dritten oder vierten erfolglosen Versuch entnervt aufgegeben.
Blinden oder stark sehbehinderten Nutzern wird das Absenden des Kommentars mit diesem Verfahren sogar gänzlich unmöglich gemacht.

Es gibt viele Nachweise, dass diese CAPTCHAs von Maschinen leicht, vielleicht sogar zuverlässiger als von Menschen, gelesen werden können.

Es gibt also keinen Grund mehr, Menschen mit CAPTCHAs zu belästigen oder gar auszusperren.

5. Inhaltliche Auswertung des Kommentartextes

Die Auswertung des Kommentartextes nach bestimmten Kriterien kann zur Erkennung von Spam beitragen. So ist beispielsweise eine große Anzahl von Hyperlinks ein Indiz für Spam. Auch bestimmte Schlüsselwörter - das sprichwörtliche Viagra - können zur Identifizierung von Spam herangezogen werden. Der Aufwand für diese Auswertung ist jedoch relativ hoch, vor allem, um sicher zu stellen, dass nicht irrtümlich Text als Spam klassifiziert wird.

6. Weitere Methoden

Einige weitere Methoden beschreibt Jared Smith im WebAIM Blog (englischsprachig).

Fazit

Alle aufgeführten Methoden können mit entsprechendem Aufwand geknackt werden. Vor allem dann, wenn die Site so bedeutend ist, dass es für Programmierer von Bots lohnend erscheint; oder wenn eine der genannten Methoden häufig genug angewandt wird. Dagegen hilft eine Kombination mehrerer Methoden. Wichtig dabei ist der Einsatz von individuellen Lösungen/Kombination von Lösungen, sodass sich kein allgemein übliches Muster erkennen lässt, das dann wiederum ein lohnendes Ziel für die Programmierer von Bots darstellt.

Kommentar schreiben

1 Kommentar

  1. Michael Welslau schrieb am Freitag, 27.12.13 03:28 Uhr:

    Ich bin durch eigene Überlegungen zu der Spam-Verhinderung nach 2. gekommen und hab diese auf einer auch von Bots stark frequentierten Seite verwendet, mit 100% Erfolg! Vor allem wird dadurch der Benutzer nicht mehr mit Captchas und Co belästigt und darauf sollte mehr geachtet werden!

Einen Kommentar zu diesem Artikel schreiben:

Über Ihren Kommentar oder Ihre Frage zu diesem Artikel freue ich mich. Ich behalte mir jedoch vor, Einträge wider die guten Sitten, unsinnige Einträge, oder Spam kommentarlos zu entfernen.

? Anweisungen zur Eingabe von BB Code Wenn Javascript verfügbar ist, können Sie die obigen Schaltflächen zum Einfügen der folgenden Steuercodes verwenden (an der Cursorposition oder um gegebenenfalls markierten Text):

[a]example.org[/a] um eine URL zu verlinken bzw.
[a]example.org Beschreibung der verlinkten Seite[/a]
[b]als wichtig <strong>[/b] hervorgehobener Text
[c]Quellcode[/c] oder optisch hervorgehobenes Zitat

Tastaturkürzel