|
|
|
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 |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
|
<?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 |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
|
<?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 |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
|
<?php session_start(); ?>
<form action="eingabe.php" method="post">
<img src="captcha.php" alt="Captcha"><br><br>
<input type="text" name="captcha"> ( Groß- und Kleinschreibung beachten )
<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
Zurück zur Übersicht
Autor youzer
|
|
|
|