Captcha er ineffektivt
Hej Eksperter.Mit problemer ikke AT lave en captcha, men at lave en der rent faktisk forhindrer uvelkommene bidrag i min gæstebog.
Koden ser således ud:
<?php
session_start();
$karak=6;
//Captcha - newCode stammer fra coderdks artikel på eksperten.dk
function newCode($karak){
// Denne funktion laver en tekst der (som regel) kan udtales
$vowels = array_slice( preg_split( '//', 'AEYaeiy' ), 1, -1 );
$nvowels = count( $vowels ) - 1;
$consonants = array_slice( preg_split( '//', 'BCDFGHJKLMNPQRSTZbcdfghjkmnpqrstz1234567890' ), 1, -1 );
$nconsonants = count( $consonants ) - 1;
$code = "";
$rnd = mt_rand( 0, 1 ) == 1 ? true : false;
// Loopet herunder bygger teksten
while (strlen( $code ) < $karak)
{
$code .= ($rnd ? $vowels[mt_rand(0, $nvowels)] : $consonants[mt_rand(0, $nconsonants)]);
$rnd = !$rnd;
}
return $code;
}
$code=newCode($karak);
$arne=md5(microtime());
$_SESSION['zzxxqqwwttyughtyureetffrgguujjikkklooommme']=$code;
$dir="../lib/fonts/";
$fonts=array();
foreach(scandir($dir) as $name) {
if (!is_dir($name)) $fonts[]=$name;
}
$w=200;
$h=50;
$im=imagecreate ($w, $h);
$baggrund=imagecolorallocate($im,230,230,230); //lysegrå
imagefill($im,0,0,$baggrund);
$left=6;
$text_to_arr=str_split($code);
foreach($text_to_arr as $letter) {
$text_farve = imagecolorallocate($im,mt_rand(0,180),mt_rand(0,180),mt_rand(0,180)); // Definer tekstfarve - rgb-værdier
$ttf=$fonts[array_rand($fonts)];
imagettftext ($im,mt_rand(24,26),mt_rand(-30,30),$left,mt_rand(25,($h-5)),$text_farve,"../lib/fonts/".$ttf,$letter);
$left=$left+($w-30)/($karak-1);
}
for($i=0;$i<=($w*5);$i++) {
$pletfarve=imagecolorallocate($im,mt_rand(0,100),mt_rand(0,100),mt_rand(0,100));
imagesetpixel($im,mt_rand(1,$w-1),mt_rand(1,$h-1),$pletfarve);
}
header( 'Content-Type: image/jpeg' );ImageJpeg($im);
ImageDestroy($im);
?>
Og et eksempel kan ses her: http://hecker.dk/lib/captcha.php
Normalt kalder jeg den i et <img>-tag.
Før havde jeg et simpelt regnestykke, og fik måske 1-3 ugentlige spams.
Siden jeg lavede denne på min side, er der kommet ca 40 i døgnet. Jeg kan ikke se, om der er en "læk", dvs om jeg et eller andet sted afslører koden i ren tekst.
Men det tror jeg altså ikke.
Det mærkelige sessionvaribelnavn, er et desperat camuflageforsøg....
Nogen tips??
/y