SPAM bekämpfen mit PHP

SPAM bekämpfen mit PHP

antispam

Wer schon mal ein eigenes Mailformular für eine Seite geschrieben hat, kennt das Problem. Nach kurzer Zeit häufen sich die SPAM Anfragen die über das Formular versendet werden. Viele setzen daher CAPTCHA Codes ein, mit denen die SPAM-Bots aufgehalten werden. Aber ein Problem ensteht dadurch. Manche User lassen sich durch eine simple CAPTCHA Abfrage davon abhalten, überhaupt ein Formular zu verwenden. Oder es passt einfach optisch nicht zu einer Seite.

Für diese Fälle gibt es einen Trick, der zumindest einen Großteil der Bots ausbremst. Man überprüft die Zeit zwischen dem Eintreffen auf der Seite und dem senden des Formulars. Ist die Zeit zu kurz, nimmt man an das man es mit einem Bot zu tun hat, und lehnt die Anfrage ab.

Dabei geht man wie folgt vor. Im Formular wird ein verstecktes Feld mit Zeitstempel platziert:

<input type="hidden" name="timestamp" value="<?php echo time(); ?>">

Und dann lässt sich vor dem versenden der Mail, eine Überprüfung durchführen:

if (time() - $_POST['timestamp'] > 5) {
// Mail versenden
} else {
// Mail nicht versenden
}

Je nach Formular kann man die Zeit auch noch verlängern. In diesem Fall muss der User langsamer als 5 Sekunden beim Ausfüllen sein. Und das sollten die wenigsten menschlichen Benutzer schaffen.

Wichtig ist auch noch darauf zu achten, ob das Formular per POST oder GET versendet wird, und der timestamp dementsprechend abgefragt wird.

UPDATE: Ein kleiner Nachtrag, nachdem ich mit dem PHP Skript zwar einen Großteil, aber nicht alle Spam-Bots aufhalten konnte. Mit folgendem Skript, überprüfe ich meine Textarea nach Links. Das macht natürlich nur Sinn, wenn man Links in den Kontaktanfragen verbietet.

$badwords = array('a href', '&lt;a /&gt;', '<a />');
foreach($badwords as $badword) {
 if (strpos($nachricht,$badword) !== false) {
   $error = true;
 }
}

4 thoughts on “SPAM bekämpfen mit PHP

  1. Jens

    Danke für den Ansatz, habe gerade nach einer möglichkeit gesucht den Spam-mails entgegenzuwirken.
    Und das Captcha eingaben einen nerven bzw. abschrecken ist wahr. Spreche aus Erfahrung xD

  2. Giorgio

    Wir haben das auch gleich mal bei uns integriert. Hört sich nach einer guten Lösung an. Bis jetzt hatten wir viel manuellen Aufwand mit Spam, da wir auch auf ein Captcha verzichten wollen. Aber wie sieht das dann eigentlich mit einer Fehl-Eingabe aus? Also wenn ein Nutzer ein Feld vergisst, dann die Seite nochmal lädt, da wäre es doch möglich, dass er schneller als in 5 Sekunden absendet.

    1. Andi Post author

      Guter Punkt. Man könnte die Abfrage noch erweitern, sprich wenn ein Fehler gesetzt war, die Überprüfung der Zeit wegfallen lassen. Da müsste man sich aber auch ansehen wie Bots arbeiten. Wenn die auch Fehleingaben machen hätten wir wieder ein Problem.

  3. Pingback: Sichere PHP Formulare - Schutz vor Cross-Site Scripting - Andi Bauer

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.