PHP-Einfach.de
  • PHP Tutorial
  • MySQL Tutorial
  • Für Fortgeschrittene
  • Webhosting
  • Forum

Codeschnipsel

Captcha mit dynamischen Fragen

Zurück zur Übersicht
Dieser Codeschnipsel zeigt statt einer Buchstabenreihnfolge eine Frage an, die der Benutzer beantworten muss.

Hallo ,

da ich oft gelesen habe , dass Captchas nichts nützen , da sie eh immer geknackt werden , habe ich mir überlegt wie man ein dynamisches Fragen - Antworten - Captcha erstellt - mit Erfolg!

Hier will ich euch zeigen wie das Simple , aber starke , Captcha funktioniert und wie ihr es selber coden und anpassen könnt.

Zuerst brauchen wir das Hauptcaptcha , ich habe eins von www.stoppt-den-spam.info genommen ,da ich mich nicht mit Bildern erstellen auskenne!

captcha.php
 Code 
<?php
// Vielen Dank an www.stoppt-den-spam.info ( modifiziert ) 

session_start();
unset($_SESSION['captcha_spam']);
unset($_SESSION["zahl_frage"]);
unset($_SESSION["antwort_cap"]);

   include("fragen.php");
   srand((double)microtime()*1000000);
   $zahl_frage = rand(0,$wieviele);
   $_SESSION["zahl_frage"] = $zahl_frage;
   
   
   $_SESSION['captcha_spam'] = $fragen[$_SESSION["zahl_frage"]];
   
   
   
   
   $text   =  $_SESSION['captcha_spam'];
   $_SESSION["antwort_cap"] = $antworten[$_SESSION["zahl_frage"]];  
     
     
     
   header('Content-type: image/png');
   $img = ImageCreateFromPNG('captcha.PNG'); //Backgroundimage
   $color = ImageColorAllocate($img, 255, 255,255); //Farbe
   $ttf = "Fradm.TTF"; //Schriftart
   $ttfsize = 15; //Schriftgrösse
   $angle = 0;
   $t_x = 20;
   $t_y = 25;
   imagettftext($img, $ttfsize, $angle, $t_x, $t_y, $color, $ttf, $text);
   imagepng($img);
   imagedestroy($img); ;
?>


Zuerst werden die Sessions gestartet und geresetet , dann werden die Fragen eingeladen und ein Zufallsmechanismus wählt irgendeine Frage ( durch Arrays ) und lässt sie auf den Bild anzeigen.

Außerdem wird die Antwort mitgleich gespeichert, damit sie im Formular verglichen werden kann , ob diese Antwort wirklich auf die Antwort passt.
Die Antwort Nummer ist zu gleich auch die Frage Nummer.

Ihr benötigt die Fradm.TTF , aber ihr könnt die Schriftart ganz leicht auswechslen durch eine beliebige , sie muss aber im Ordner mit drin sein , in der auch die captcha.php ist.

Das Hintergrundbild sieht so aus:



Das muss ebenfalls in einen Ordner mit captcha.php rein.

Nun kommen wir zu den Fragen , die man selber leicht erstellen und löschen kann sowie die Antworten dazu:

Fragen.php:

 Code 
<?php

$fragen = array("Welches Farmtier macht Milch?","Was dreht sich um die Erde?","Wieviel Beine hat der Mensch?","Bist du ein Bot?");

$antworten = array("Kuh","Mond","Zwei","Nein");

$wieviele = count($fragen) - 1;

?>


Es wird ein Arrasy erstellt in denen alle Fragen kommen ( von 0 bis X ) und die Antworten genauso ( von 0 bis X ). Danach wird gezählt wieviele Fragen es gibt , und soviele Antworten gibt es logischerweise. Dies ist nötig , damit eine Zufallszahl gewählt werden kann , der in diesem Bereich liegt. Sonst wird eine Zufallszahl z.B 48 gewählt und in dieser Zahl ist überhaupt keine Frage gespeichert!

Ein Wert muss von $wieviele abgezogen werden , da die 0 noch mit drin ist und deswegen immer ein zuviel ist ( wenn man nicht -1 macht , dann kriegt man oft keine Frage zu Gesicht )

Zu guter Letzt das Formular:

eingabe.php

 Code 
<?php session_start(); ?>
<form action="eingabe.php" method="post">
<img src="captcha.php" alt="Captcha"><br><br>
<input type="text" name="captcha"> ( Gro&szlig;- und Kleinschreibung beachten ) &nbsp;&nbsp;
<input type="submit" name="send"><br>

</form>

<?php

if(isset($_POST["send"])) {


   if($_POST["captcha"] == $_SESSION["antwort_cap"] AND isset($_SESSION["antwort_cap"])) {
   
   
   // Wenn das Captcha richtig ist , Code ausfuehren....
   echo "<b>Benutzer wurde erfolgreich registriert..oder so.</b>";
   
   
   }
}

?>


Das Captcha.php wird als Bild eingeladen und man muss die Antwort dazu geben. Wenn man es abgeschickt hat , wird überprüft ob die Antwort zu der Frage passt , welche in der SESSION gespeichert wurde. Wenn die Arrays miteinander übereinstimmen , dann ist das Captcha richtig und es kann mit den Code weitergehen.

Dieses kleine Captcha ist besonders gut für amerikanische Bots und russische Bots , da diese keine Antworten dadrauf geben können , sondern ( wenn sie Glück haben ) die Frage die im Bild steht , ins Feld eintragen.

Man kann das Captcha natürlich weiter erweitern , aber in diesem Tutorial wird gezeigt wie man Arrays mit Sessions kombinieren kann.

Ein Danke an php-einfach , denn ohne die wär ich in PHP immer noch eine Null!

http://kellercoding.tk

mfg

Kommentare

Autor youzer

Zurück zur Übersicht
Autor: Nils Reimers
Zurück: URLs im Text identifizieren

Für Fortgeschrittene

  • Objektorientierte Programmierung
  • PHP Sicherheit
  • Script-Beispiele
  • Codeschnipsel
  • Stellenmarkt
Mit freundlicher Unterstützung von:
  • Punkt191 Werbeagentur
  • CasinoAndy Finland
  • Casinoohnelizenz.info
  • Cryptocasinomaster.com
  • CasinoHEX.at
  • inkedin.com

Hoster – Geringste Ausfallzeit

  1. webgo Ø 1 Min.
  2. Linevast Ø 2 Min.
  3. netcup Ø 3 Min.
  4. All-Inkl.com Ø 6 Min.
  5. checkdomain Ø 8 Min.
  6. dogado Ø 17 Min.
  7. bplaced Ø 17 Min.
  8. Contabo Ø 25 Min.
  9. Hetzner Ø 49 Min.
  10. ONE.com Ø 62 Min.
» Mehr erfahren

Impressum | Datenschutz | Auf PHP-Einfach.de werben

© PHP-Einfach.de 2003 - 2023

Cookie-Zustimmung verwalten
Um dir ein optimales Erlebnis zu bieten, verwenden wir Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wenn du diesen Technologien zustimmst, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn du deine Zustimmung nicht erteilst oder zurückziehst, können bestimmte Merkmale und Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Anbieter verwalten Lese mehr über diese Zwecke
Einstellungen ansehen
{title} {title} {title}