Alternatives Captcha
Das Alternative Captcha, welches keine Bilder mit verzierten Zeichen enthält, besteht komplett aus Text.
Es wir bspw. so ein Output erzeugt "Addiere 14 und 20". Für die meisten Bots, die aus amerikanischen Botnetzen kommen, ist dass Fremdsprache. Natürlich kann die Aufgabenstellung auch varieren. Man könnte bspw. auch die Quadratzahlen abfragen oder andere lustige Spielereien treiben. Man muss nur aufpassen, das der Client nicht die Lust am Knobeln verliert und die Applikation mit Verachtung schließt.
Hier haben wir mal ein ganz simples Beispiel für euch:
<!-- vorheriges HTML -->
<?php echo $capt = xpc_generate_captcha(0,20);?> <input type="text" name="ahcptac_result" />
<input type="hidden" name="ahcptac" value="<?=$capt;?>" />
<!-- noch mehr HTML -->
Oben seht ihr wie ihr das Captcha einbindet. Die Funktion xpc_generate_captcha() bekommt zwei Parameter übergeben. Der erste Parameter ist der Startwert und der zweite der Höchstwert für die zufälligen Zahlen, die in der Funktion generiert werden. Während ihr in der 2. Zeile den String der Aufgabe in $capt schiebt, wird $capt auch gleich ausgeben. Dahinter platziert ihr ein Eingabefeld für das Captcha (hier ist der Name des Eingabefelds ahcptac_result -> reverse("ahcptac") => captcha). Ein verstecktes Inputfeld um den Aufgabenstring zu transportieren, kommt gleich danach (name="ahcptac"). Das ganze findet in einem Formular statt. Also wird, sofern man die Formulardaten mit POST (method="post") verschickt, ein Array von POST-Daten ankommen.
//serverseitige Tests
if(xpc_read_captcha($_POST['ahcptac'],$_POST['ahcptac_result'])){
//Test bestanden
}else{
//Test nicht bestanden
}
Die Funktion xpc_read_captcha() bekommt 2 Parameter übergeben. Der Erste ist der Aufgabenstring und der zweite ist das Resultat. In dieser Funktion wird entschieden, ob die Aufgabe richtig gelöst wurde.Und hier nun die Source der beiden Funktionen.
function xpc_read_captcha(&$capt,$res){
$foo = preg_split('/ /', $capt, -1, PREG_SPLIT_OFFSET_CAPTURE);
return ((intval($foo[1][0]) + intval($foo[3][0])) == intval($res))? true : false;
}
function xpc_generate_captcha($from,$to){
return "Addiere ".rand($from,$to)." und ".rand($from,$to); //Summate $int_1 and $int_2
}
[goto: download page]