PHP

Captchacode erstellen (PHP Tutorial)

Tutorial erstellt von Dac-XP, letzte Änderung am 21.09.2007

Jeder kennt es. Da hat man mal eben schnell ein Gästebuch gecodet oder eine Kommentarfunktion für seinem Blog geschrieben, schon stürzen sich Spambots auf die Eingabemasken, wie Fliegen auf den faulen Apfel.
Das Aufräumen ist dann sehr schwer, will man doch auch die wirklichen, lesenswerte Beiträge erhalten. Meistens bleibt also nur das Löschen einzelner Datensätze per Hand. Ätzend...

Um dem vorzubeugen kann man sich ein sogenanntes "Captcha" basteln. Das ist ein Bild, das einen zufälligen, mehrstelligen Code darstellt, den der Benutzer in ein dazugehöriges Textfeld eingeben muss, damit der Eintrag (die Registrierung) akzeptiert wird.

Bevor man allerdings loslegen kann, müssen die GD- und FreeType Bibiotheken installiert sein.

So ein Captchacode besteht aus drei Teilen:
1. PHP-Script, das einen Code erzeugt und als Bild ausgibt
2. Formularfeld
3. Abfrage des Codes



1. PHP-Script

Zunächst basteln wir uns den Teil, der den Code erzeugt und als Bild ausgibt.

captchacode.php
Code:
<?php
  // Session starten (auch wenn vorher schonmal vorhanden)
  session_start();
  // Leeren des Wertes in der Session
  unset($_SESSION['captchacode']);
  
  // Zeichen, die der Captchacode enthalten darf
  $moeglicheZeichen = "abcdefghiklmnpqrstuvwxy123456789";
  // Anzahl der Zeichen, die der Captchacode enthalten soll
  $anzahlZeichen = 4;
  
  // Definieren der Captchacode-Variable und "vorsorgliches" Leeren
  $captchacode = "";
  
  // Füllen der Captchacode-Variable mit der festgelegten Anzahl zufälliger Zeichen
  for($i = 0; $i < $anzahlZeichen; $i++)
    {
      $captchacode .= substr($moeglicheZeichen, (rand()%(strlen($moeglicheZeichen))), 1);    
    }
    
  // Schreiben des Captchacodes in die Session
  $_SESSION['captchacode'] = $captchacode;
  
  // Dem Browser vormachen, das Dokument wäre eine .jpg-Datei (Bildtyp)
  header('Content-type: image/jpg');
  
  // Ein Bild aus einem vorhandenem Bild erstellen
  $img = ImageCreateFromJPEG('captcha_back.jpg');
  
  // Festlegen einer Farbe für die Schrift (mit Zufallswerten)
  $farbe = ImageColorAllocate($img, rand(0, 55), rand(0, 55), rand(0, 55));
  // Bestimmen der Schriftart relativ zum Dokumentroot
  $ttf = $_SERVER['DOCUMENT_ROOT']."font.ttf";
  // Schriftgröße
  $groesse = 12;
  // Winkel der Schrift (Zufallswert)
  $winkel = rand(0, 5);
  // Horizontale Position (Zufallswert)
  $x = rand(5, 20);
  // Vertikale Position (Schriftgröße + Abstand zum Rand)
  $y = 14;
  
  // Belegen des Hintergrundbildes mit dem Code
  imagettftext($img, $groesse, $winkel, $x, $y, $farbe, $ttf, $captchacode);
  // Ausgabe des fertigen Bildes
  imagejpeg($img);
  // Löschen des Bildes aus dem Zwischenspeicher
  imagedestroy($img);
  
?>


2. Formularfeld

Um den Code überhaupt irgendwo eintragen zu können, benötigen wir noch ein Formular, das in unserem Beispiel der Einfachheit halber nur aus den nötigsten Elementen besteht.

formular.php
Code:
<form action="check_captcha.php" method="post">
  <img src="captchacode.php">
  <input name="user_captcha">
  <input type="submit" value="Code checken">
</form>


3. Abfrage des Codes

Und das Script, welches den eingegebenen Code auf seine Korrektheit überprüft ist auch nicht besonders kompliziert.

check_captcha.php
Code:
//Session starten
session_start();

//Überprüfen, ob Code in der Session und Code vom Benutzer gleich sind
if($_SESSION['captchacode'] == $_POST['user_captcha'])
  {

    [.. Aktion, wenn Captcha richtig eingetragen wurde ..]

  }
else
  {

    [.. Wahrscheinlich Ausgabe einer Fehlermeldung ..]

  }


Das wäre es auch schon. Zu beachten ist lediglich, dass eine ttf-Schriftart (TrueType) im selben Verzeichnis liegt, wie das Script, und diese auch im Script verwendet wird.

Als Hintergrund kann dann sowas dienen:


MfG Dac! B)

Wie man einen wunderschönen Sicherheitscode erstellen kann, um seine Gästebücher, Kommentare, Foren, Shoutboxes und alle anderen Web2.0 Elemente frei von BOTs und SPAM zu halten.


>> Allgemeine Fragen oder Probleme mit dem Tutorial? Hier gehts zum Forum!

Impressum / Datenschutzerklärung          © der-Webdesigner.net 2002 - 2011           top ▲