Zum Inhalt springen

Tutorial: Einfache Captchas mit PHP erstellen

975b26d71c414552935370bc16ebd9bb Tutorial: Einfache Captchas mit PHP erstellen

Captchas (Completely Automated Public Turing test to tell Computers and Humans Apart) sind Tests, die verwendet werden, um sicherzustellen, dass eine Webseite von einem menschlichen Nutzer und nicht von einem automatisierten Programm besucht wird. Sie werden oft verwendet, um die Registrierung von Benutzerkonten oder das Absenden von Formularen zu schützen.

Um ein Captcha mit PHP zu erstellen, gibt es einige Schritte, die Sie befolgen können:

  1. Erstellen Sie eine PHP-Datei, die das Captcha generiert. In dieser Datei sollte eine Funktion enthalten sein, die ein Captcha-Bild erstellt und es an den Browser sendet.
  2. Verwenden Sie die PHP-GD-Bibliothek, um das Captcha-Bild zu erstellen. Diese Bibliothek bietet Funktionen zum Erstellen und Bearbeiten von Bildern. Verwenden Sie zum Beispiel die ImageCreate-Funktion, um ein neues Bild zu erstellen, und die ImageTTFText-Funktion, um den Text des Captchas auf das Bild zu zeichnen.
  3. Speichern Sie das Captcha-Text in der Sitzung. Verwenden Sie die PHP-Session-Funktionen, um den Captcha-Text in einer Sitzungsvariablen zu speichern. Dies ermöglicht es Ihnen, den Text später zu überprüfen, wenn das Formular abgesendet wird.
  4. Erstellen Sie ein Formular, das das Captcha anzeigt. Verwenden Sie das img-Tag, um das Captcha-Bild anzuzeigen, und fügen Sie ein Textfeld hinzu, in das der Benutzer den Captcha-Text eingeben kann.
  5. Überprüfen Sie den Captcha-Text, wenn das Formular abgesendet wird. Verwenden Sie die Session-Funktionen erneut, um den Captcha-Text aus der Sitzung abzurufen und ihn mit dem Text zu vergleichen, der vom Benutzer eingegeben wurde. Wenn die beiden übereinstimmen, ist der Benutzer möglicherweise ein Mensch. Wenn sie nicht übereinstimmen, könnte es sich um ein automatisiertes Programm handeln, und Sie können entsprechend reagieren.

Hier ist ein Beispielcode in PHP, der zeigt, wie man ein Captcha erstellen und überprüfen kann:

<?php

// Starten der Sitzung
session_start();

// Erstellen des Captcha-Bildes

// Bildgröße festlegen
$width = 150;
$height = 50;

// Neues Bild erstellen und Transparenz aktivieren
$image = imagecreatetruecolor($width, $height);
imagealphablending($image, true);
imagesavealpha($image, true);

// Hintergrundfarbe festlegen
$bg_color = imagecolorallocatealpha($image, 255, 255, 255, 127);

// Hintergrund mit der Hintergrundfarbe füllen
imagefill($image, 0, 0, $bg_color);

// Captcha-Text erstellen
$chars = "ABCDEFGHJKLMNPQRSTUVWXYZ23456789";
$text = "";

for ($i = 0; $i < 5; $i++) {
  // Zufälligen Buchstaben auswählen
  $char = $chars[rand(0, strlen($chars) - 1)];
  $text .= $char;

  // Schriftart festlegen
  $font = "arial.ttf";

  // Schriftgröße festlegen
  $size = 30;

  // Schriftfarbe festlegen
  $color = imagecolorallocate($image, 0, 0, 0);

  // Text auf das Bild schreiben
  imagettftext($image, $size, 0, 10 + $i * 30, 35, $color, $font, $char);
}

// Captcha-Text in der Sitzung speichern
$_SESSION["captcha_text"] = $text;

// Captcha-Bild an den Browser senden
header("Content-Type: image/png");
imagepng($image);

// Ressourcen freigeben
imagedestroy($image);

?>

Dann benötigst Du noch ein Formular in HTML:

<form method="POST" action="verify.php">
  <img src="captcha.php" alt="Captcha-Bild">
  <br>
  <label for="captcha">Captcha-Text:</label>
  <input type="text" name="captcha" id="captcha">
  <br>
  <input type="submit" value="Absenden">
</form>

Und schließlich die Captcha-Überprüfungs-Datei (verify.php)

<?php

// Starten der Sitzung
session_start();

// Captcha-Text aus der Sitzung abrufen
$captcha_text = $_SESSION["captcha_text"];

// Captcha-Text aus dem Formular abrufen
$submitted_text = $_POST["captcha"];

// Captcha-Text vergleichen
if (strtolower($submitted_text) == strtolower($captcha_text)) {
  // Captcha wurde erfolgreich überprüft
  echo "Captcha erfolgreich überprüft.";
} else {
  // Captcha nicht überprüft
  echo "Captcha nicht überprüft.";
}

?>

Hinweis: Dies ist nur ein Beispielcode und sollte möglicherweise angepasst werden, um Ihren Anforderungen zu entsprechen. Sie können beispielsweise andere Schriftarten, Schriftgrößen oder Hintergrundfarben verwenden, oder den Code erweitern, um das Captcha zu verschleiern oder zu verzerren. Es empfiehlt sich auch, das Captcha zu speichern und zu überprüfen, nachdem es einmal erfolgreich überprüft wurde, um sicherzustellen, dass es nicht mehrmals von demselben Benutzer verwendet wird.

Kai Spriestersbach