Fight the Kommentar-Spam — X-tended

Wie im vorherigen Beitrag beschrieben, sind Spambots extrem dumm, bzw. der Programmierer dieser hat in den Code der Bots nicht ausreichend Hirnschmalz gesteckt. Ist in der Regel auch nicht nötig, da Kommentarfelder und Gästebuchformulare sehr einfach aufgebaut sind.

Die hier nun weiter beschriebene Möglichkeit stammt nicht aus meiner Feder, sondern von dem Ersteller des Grundgerüsts meines Weblog-Systems Andreas Ahlenstorf. Vielen Dank nochmals, für diese — seit zwei Jahren — gut funktionierende Idee! Und es ist wieder nur ein Fingerzeig, wie man an das Thema herangehen kann und keine fertige Plugin Lösung. Falls jemand eine coded, egal für welches Weblogsystem, bin ich bereit, diese hier gern zu verlinken oder zu veröffentlichen.

Also, um es nochmals zu wiederholen und zusammenzufassen. Spambots sind dumm und füllen alles aus, was denen unterkommt. Spambots beherrschen aber keine Cookies und somit auch keine Sessions. Um es einfach auszudrücken, Spambots nehmen keine laufenden Daten mit, wenn diese auf deiner Webseite von einer Seite zur nächsten wandern.

Diese Tatsache ließ die Idee aufkommen, daß man den Input-Feldern nicht mehr den gleichen Namen, wie z. B. „author“, „commenttext“, „email“ oder „website“, sondern diesen immer wieder ändernde Hashwerte gibt, welche erst über eine Session ihrer richtigen Bedeutung, wie „author“, „website“, etc. zugeordnet wird. Das alles zur Veranschaulichung in ein kleines Beispiel gepackt. Vorher sah es immer so aus:

<input type=„text“ name=„author“ />

Über name=„author“ wird in dem dahinter liegenden Skript, welches dann den Kommentar wegspeichert, eine eindeutige Zuordnung hergestellt. Bei mir sieht es dagegen so aus:

<input type=„text“ name=„79bb89ba1bb6fbc26af7b31198731d10f85cefa8“ />

Der Zufallswert hinter name= ändert sich bei jedem Aufruf der Seite, die das Kommentarfeld aufweist. Eine eindeutige, wiederkehrende Zuordnung ist also nicht gegeben. Da dies aber nötig ist, um den Inhalt auch richtig speichern zu können, wird bei mir in der Session diese Zuordnung hinterlegt, so daß beim abschicken des Kommentares erst einmal in der Sessionvariable „nachgeschaut“ wird, daß z. B. der Input-Feld-Name 79bb89ba1bb6fbc26af7b31198731d10f85cefa8 für das Feld Author steht.

Ein Spambot, der keine Cookies beherrscht und somit auch die Session nicht mitführt, kann somit keinen Kommentar abgeben. Leider aber auch kein menschlicher Kommentator, der Cookies in seinem Webbrowser abgeschaltet hat. Aber kollaterale Schäden gibt es immer 😉

Diese o. g. Hashwerte müssen für jedes Kommentarfeld erstellt, in der Session hinterlegt werden und eindeutig sein. Mit PHP erstellt man diesen eindeutigen Hashwert so:

sha1(uniqid(rand(), true));

Diesen, bzw. da man es ja für alle Inputfelder erstellen muß, diese Hashwerte sichert man dann in der Session, z. B. wie hier:

$_SESSION[‘field‘][‘author‘] = sha1(uniqid(rand(), true));
$_SESSION[‘field‘][‘email‘] = sha1(uniqid(rand(), true));
$_SESSION[‘field‘][‘website‘] = sha1(uniqid(rand(), true));
$_SESSION[‘field‘][‘comment‘] = sha1(uniqid(rand(), true));

und gibt diese, logischerweise, seinem Webseiten-Template mit, damit dieses diese dann anstelle von „author“, „email“, etc. einfügt.

Wird nun ein Kommentar abgegeben, muß nun zwingend eine Session vorhanden sein. Ist diese nicht da, ist es mit ziemlicher Sicherheit ein Spambot. Wenn es kein Bot ist, also die Session vorhanden ist, geht man beim speichern den umgekehrten Weg und ordnet den Hashwerten wieder die eindeutige Bedeutung zu. Hier ein beispielhafter PHP-Auszug, nur für das Author-Feld:

if (empty($_SESSION[‚fields‘][‚author‘])) {
echo „Possible Spam“;
exit;
}

if (!isset($_REQUEST[$_SESSION[‚fields‘][‚author‘]])) {
echo „Possible Spam“;
exit;
}

$request_vars[‚author‘] = strip_tags($_REQUEST[$_SESSION[‚fields‘][‚author‘]]);

Soweit alles verstanden, was ich meine? Ich bin leider nicht der „Erklärbär“, aber ich möchte auch nur einen Ansatz geben, wie man noch gegen Kommentarspam vorgehen kann ohne den normalen Besucher unnötig zu belästigen. Und gegen Tipps, wie ich den Artikel auffrischen kann, bin ich auch dankbar.

Wer hieraus ein Plugin für eines der bekannten Weblogsysteme erstellt, soll sich bitte melden.

6 Kommentare » Schreibe einen Kommentar

  1. Hallo Thorsten,

    würde es nicht ausreichen ein einziges Feld per Session zu übergeben? Ich nutze ein Feld namens „formwaechter“ und übergebe dessen Inhalt in einer Session.

    Gruß
    Chris

    PS: Du solltest deine Pflichtfelder gleich beim ersten Aufruf des Formulars kennzeichnen, das erspart so manchem Nutzer die erneute Eingabe. 😉

  2. Ja, es würde auch reichen, nur ein einziges Feld per Session zu übergeben. Aber wenn man einmal dabei ist, kann man ja direkt alle Felder Ver-Session 😉

    Die Pflichtfelder werden doch angezeigt, wenn du mit der Maus drüber fährst und wenn du die Lampe der Erleuchtung klickst 🙂

    Aber unter der von dir angegebenen Adresse erreiche ich dich aber auch nicht …

  3. Pingback: www.nasendackel.de : Wordpress: Endlich Spamfrei

  4. Pingback: Beschämend • puzich.com :: I took the blue pill

  5. Pingback: Spambots are birdbrained • puzich.com :: I took the blue pill

Schreibe einen Kommentar

Pflichtfelder sind mit * markiert.


eMail-Benachrichtigung bei weiteren Kommentaren.
Auch möglich: Abo ohne Kommentar.