phpBuddy

Folge phpBuddy.eu auf Twitter

Ab sofort können alle Twitter-Begeisterte sich auch über die Aktivitäten von phpBuddy.eu auf Twitter informieren. Ich werde dort in unregelmäßigen Abständen über neue Artikel, Tutorials, Kurztipps, lesenswerte Forumeinträge oder schlicht interessante PHP Funktionen informieren.

Sie sind hier: Startseite Schutz vor Spambots (CAPTCHA)
Schutz vor Spam-Bots mit CAPTCHA
Beitragsseiten
Schutz vor Spam-Bots mit CAPTCHA
Das CAPTCHA Script
Das Kontaktformular erweitern
Fazit und Linkübersicht
Alle Seiten

Vorwort

So ziemlich jeder der ein Kontaktformular, Gästebuch oder auch Forum auf seiner Webseite betreibt hat schon einmal Bekanntschaft mit dieser verhassten Gattung gemacht: Spam-Bots!
Die ultimative Lösung gegen Spam-Bots gibt es nicht, aber man kann ihnen dennoch mit relativ einfachen Mitteln das Leben wesentlich erschweren. Eine sehr einfache und zugleich effektive Maßnahme ist das einbauen eines sogenannten CAPTCHA. Der Ausdruck CAPTCHA steht für Completely Automated Public Turing test to tell Computers and Humans Apart und ist vereinfacht ausgedrückt eine Methode, die menschliche Interaktion bedarf um eine bestimmte Aktion auf einer Webseite auszuführen. Eine ausführliche Erklärung dazu findet man in diesem Artikel bei Wikipedia.

In diesem Tutorial erstellen wir uns ein einfaches CAPTCHA-Script und anhand eines Pseudo-Kontaktformulars wird demonstriert wie man auch nachträglich noch ein CAPTCHA in sein Formular, Gästebuch oder was auch immer, einbauen kann.
Pseudo-Kontaktformular sage ich deswegen, weil die Mail-Funktion nicht eingebaut ist und eine anständige Überprüfung der Benutzereingaben nicht statt findet. Dieses Forum bietet aber diverse Formmailer-Tutorials und fertige Formmail Scripts an, womit man sehr leicht in der Lage ist sich etwas vollwertiges zusammen zu basteln.

Voraussetzungen

Um das hier gezeigte erfolgreich in eigene Projekte zu übernehmen benötigt man

  • einfache PHP Kenntnisse
  • GD2 Unterstützung auf dem Webserver
  • Lernbereitschaft und etwas Zeit

Ob der Webserver, auf dem das Script laufen soll, GD2 Unterstützung bietet kann man sehr einfach herausfinden indem man phpinfo() ausführt und den Abschnitt GD unter die Lupe nimmt.

Das Kontaktformular ohne CAPTCHA

Nachfolgend der Quelltext unseres Beispiel-Kontaktformulars das wir nachträglich mit einem CAPTCHA erweitern wollen. Um Platz zu sparen ist das Script etwas gekürzt und der CSS Teil wurde entfernt. In der angehängen Datei ist jedoch das komplette Script enthalten.

<?php
// Variablen initialisieren
$NameFehler = $EmailFehler = $NachrichtFehler = FALSE;
$Fehlerfrei = TRUE;
 
// Formular wurde abgeschickt
if (isset( $_POST['senden'] ))
{
    // Felder auf Inhalt pruefen
    if (strlen( trim( $_POST['name'] ) ) < 3)
    {
        $Fehlerfrei = FALSE;
        $NameFehler = TRUE;
    }
    if (strlen( trim( $_POST['email'] ) ) < 3)
    {
        $Fehlerfrei = FALSE;
        $EmailFehler = TRUE;
    }
    if (strlen( trim( $_POST['nachricht'] ) ) < 3)
    {
        $Fehlerfrei = FALSE;
        $NachrichtFehler = TRUE;
    }
 
    // Wenn alle Felder ausgefuellt wurden und der CAPTCHA-Code korrekt war
    if ($Fehlerfrei)
    {
        // Code zum Email-Versand ausfuehren
        echo "<h2 class="tut-headline">Das Formular wurde korrekt ausgefuellt!</h2>";
    }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Kontaktformular mit CAPTCHA</title>
</head>
 
<body>
<form id="kontaktformular" action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    <fieldset>
        <legend>Kontaktformular</legend>
        <label for="name"><?php echo $NameFehler ? '<span style="color: #FF0000;">Ihr Name:</span>' : 'Ihr Name:'; ?></label>
            <input name="name" id="name" type="text" value="<?php echo $_POST['name']; ?>" />
        <label for="email"><?php echo $EmailFehler ? '<span style="color: #FF0000;">Ihre Email:</span>' : 'Ihre Email:'; ?></label>
            <input name="email" id="email" type="text" value="<?php echo $_POST['email']; ?>" />
        <label for="nachricht"><?php echo $NachrichtFehler ? '<span style="color: #FF0000;">Ihre Nachricht:</span>' : 'Ihre Nachricht:'; ?></label>
            <textarea rows="6" name="nachricht" id="nachricht"><?php echo $_POST['nachricht']; ?></textarea>
        <input name="senden" id="senden" type="submit" value="Absenden" class="button" />
    </fieldset>
</form>
</body>
</html>

Wie man unschwer sieht ist dieses Script alles andere als sicher. Für ein Spam-Bot wäre es ein leichtes tausende von Emails an unzählige User zu senden. Ja korrekt gelesen; Spam-Bots haben es nicht darauf abgesehen einem einzelnen Benutzer das Postfach zu verstopfen, sondern sind viel eher darauf aus ihre unerwünschte Botschaften und Werbung an tausende Benutzer gleichzeitig zu verteilen. Man kann sich wohl zu 99% sicher sein das die tägliche Pharma-Werbung in der Mailbox über unsichere und nachlässig programmierte Scripts von Hobbywebmaster kommen.
Aber zurück zu unserem Kontaktformular. Damit wir einen Sicherheitscode einbauen können benötigen wir natürlich erst mal ein Script das uns selbigen erzeugt.