Op PHPClasses kom ik een leuke class tegen: icaptcha. icaptcha is een PHP class waarmee je CAPTCHA’s op je site kan knallen. Daar zijn uiteraard meer classes van, maar aan onderstaand plaatje is duidelijk te zien wat er bijzonder is aan deze CAPTCHA.

De CAPTCHA vraagt je in dit geval niet een code over te typen, ook vraagt het niet de uitkomst van een rekensommetje in te vullen – Nee, de CAPTCHA heeft er behoefte aan dat jij de juiste kleur selecteert. Nu kan bij deze vraag de verwarring zich nog afspelen tussen wit en geel, maar in het algemeen zijn de antwoorden duidelijk. Je kan een paar CAPTCHA’s testen op de site van de maker.
Wat een onzin zeg…
Best grappig bedacht, maar niet echthandig voor mensen die kleurenblind zijn en/of aangepaste kleuren/contrast instellingen hebben.
Een kans van 1/6 dat een willekeurige form-request wordt goedgekeurd lijkt me niet echt wenselijk. Niet echt een heel bruikbaar systeem dus.
ik wilde het zelf ook maar eens maken hier mijn lelijk gecodeerde hersenspinsel :P
voorbeeldje : klik
< ?
## captcha
$text = 3; // 0 = text invoer 1 = pulldown 2 = radio buttons 3 = random
if($text == 3){
$text = rand(0,2);
}
function valid_captcha($a,$post){
if($a == 1){
if($post == 'red'){ return TRUE; $correct = 1; }
if($post == 'RED'){ return TRUE; $correct = 1; }
if($post == 'Red'){ return TRUE; $correct = 1; }
if($post == 'Rood'){ return TRUE; $correct = 1; }
if($post == 'rood'){ return TRUE; $correct = 1; }
}elseif($a == 2){
if($post == 'green'){ return TRUE; $correct = 1; }
if($post == 'GREEN'){ return TRUE; $correct = 1; }
if($post == 'Green'){ return TRUE; $correct = 1; }
if($post == 'Groen'){ return TRUE; $correct = 1; }
if($post == 'groen'){ return TRUE; $correct = 1; }
}elseif($a == 3){
if($post == 'blue'){ return TRUE; $correct = 1; }
if($post == 'BLUE'){ return TRUE; $correct = 1; }
if($post == 'Blue'){ return TRUE; $correct = 1; }
if($post == 'Blauw'){ return TRUE; $correct = 1; }
if($post == 'blauw'){ return TRUE; $correct = 1; }
}elseif($a == 4){
if($post == 'yellow'){ return TRUE; $correct = 1; }
if($post == 'YELLOW'){ return TRUE; $correct = 1; }
if($post == 'Yellow'){ return TRUE; $correct = 1; }
if($post == 'geel'){ return TRUE; $correct = 1; }
if($post == 'Geel'){ return TRUE; $correct = 1; }
}
if($correct != 1){
return FALSE;
}
}
if($_POST['captcha'] != ''){
if(valid_captcha($_POST['a'],$_POST['captcha'])){
echo "correcte captcha!!";
}else{
echo "foutieve captcha!!";
}
}else{
$a = rand(1,4);
$b = rand(1,4);
if($a == 1){
$color = "#FF0000"; // red
}elseif($a == 2){
$color = "#009900"; // green
}elseif($a == 3){
$color = "#0099FF"; // blue
}elseif($a == 4){
$color = "#FFCC00"; // yellow
}
if($b == 1){
$word = "RED";
}elseif($b == 2){
$word = "GREEN";
}elseif($b == 3){
$word = "BLUE";
}elseif($b == 4){
$word = "YELLOW";
}
// form
echo '
Deze captcha is wel heel makkelijk te hacken he. Gewoon eerst lezen welke woord tussen strong staat en dan de daar bijhorende value pakken.
hij is niet waterdicht maar als mensen daar bots voor gaan maken verzin ik wel iets nieuws ;) suggesties zijn welkom hoor
begrijp jij hem trouwens wel je moet de achtergrond kleur invullen he ;)
Ooit gehoord van de functies strtolower() en strotoupper()? ;-)
@ Erik-Jan : zo beter ? Was ff snel op het werk gemaakt vandaar. er kunnen nog heel wat verbeteringen in hoor.
< ?## captcha
$text = 3; // 0 = text invoer 1 = pulldown 2 = radio buttons 3 = random
if($text == 3){
$text = rand(0,2);
}
function valid_captcha($a,$post){
$post = strtolower ($post);
if($a == 1){
if($post == 'red'){ return TRUE; $correct = 1; }
if($post == 'rood'){ return TRUE; $correct = 1; }
}elseif($a == 2){
if($post == 'green'){ return TRUE; $correct = 1; }
if($post == 'groen'){ return TRUE; $correct = 1; }
}elseif($a == 3){
if($post == 'blue'){ return TRUE; $correct = 1; }
if($post == 'blauw'){ return TRUE; $correct = 1; }
}elseif($a == 4){
if($post == 'yellow'){ return TRUE; $correct = 1; }
if($post == 'geel'){ return TRUE; $correct = 1; }
}
if($correct != 1){
return FALSE;
}
}
if($_POST['captcha'] != ''){
if(valid_captcha($_POST['a'],$_POST['captcha'])){
echo "correcte captcha!!";
}else{
echo "foutieve captcha!!";
}
}else{
$a = rand(1,4);
$b = rand(1,4);
if($a == 1){
$color = "#FF0000"; // red
}elseif($a == 2){
$color = "#009900"; // green
}elseif($a == 3){
$color = "#0099FF"; // blue
}elseif($a == 4){
$color = "#FFCC00"; // yellow
}
if($b == 1){
$word = "RED";
}elseif($b == 2){
$word = "GREEN";
}elseif($b == 3){
$word = "BLUE";
}elseif($b == 4){
$word = "YELLOW";
}
// form
echo '
Ik zie het nu ja. Al is dat nog niet heel veilig. Gewoon geen kleur vragen maar een iets noemen wat een kleur is. Bijvoorbeeeld. Welke kleur heeft gras?
check ook eens dit artikel en vooral de links die erin staan.
PS: leuk trouwens om hem te testen als je er mee bezig bent :-)