Muhtamelen bir çok sitede karşınıza çıkmıştır guvenlik kodu. sizden resimde gördüğünüz karakterleri girmenizi ister. Bunun amacı formu dolduran kişinin insan olup olmadığını anlamak böylece hazır olarak yazılmış kodlar ile sitenize sürekli form bilgileri gönderilip çökmesine engel olmaktır. Buna kısaca insan kontrolü yada güvenlik kontrol kodu diyoruz.
Bunu nasıl yapacağımıza geçmeden önce bunun için hostunuzda GD desteğinin olması gerektiğini söylemem gerekir. Eğer aşağıdakiler bire bir uyguladığınız da hata alıyorsanız host şirketi ile görüşün ve hostunuzda GD desteği olup olmadığını öğrenin.
Öncelikle güvenlik kodumuzu tutacak database tablolarını oluşturmamıs gerekir.
SecurityCode.SQL Dosyası İçin Tıklayın
Daha sonra güvenlik kodunu kullanıcılara gösterecek PHP güvenlik scriptimizi yazalım.
<?PHP
if (isset($HTTP_GET_VARS["refid"]) && $HTTP_GET_VARS["refid"]!="") {
$referenceid = stripslashes($HTTP_GET_VARS["refid"]);
} else {
$referenceid = md5(mktime()*rand());
}
$font = "courbd.ttf";
$bgurl = rand(1, 3);
$im = ImageCreateFromPNG("bg".$bgurl.".png");
$chars = array("a","A","b","B","c","C","d","D","e","E","f","F","g","G","h","H","i","I","j","J","k",
"K","l","L","m","M","n","N","p","P","q","Q","r","R","s","S","t","T","u","U","v",
"V","w","W","x","X","y","Y","z","Z","1","2","3","4","5","6","7","8","9");
if(isset($_GET['t']))
$length = $_GET['t'];
else
$length = 5;
$textstr = "";
for ($i=0; $i<$length; $i++) {
$textstr .= $chars[rand(0, count($chars)-1)];
}
$size = rand(14, 16);
$angle = rand(-5, 5);
$color = ImageColorAllocate($im, rand(0, 100), rand(0, 100), rand(0, 100));
$textsize = imagettfbbox($size, $angle, $font, $textstr);
$twidth = abs($textsize[2]-$textsize[0]);
$theight = abs($textsize[5]-$textsize[3]);
$x = (imagesx($im)/2)-($twidth/2)+(rand(-20, 20));
$y = (imagesy($im))-($theight/2);
ImageTTFText($im, $size, $angle, $x, $y, $color, $font, $textstr);
header("Content-Type: image/png");
ImagePNG($im);
imagedestroy($im);
$db->query("INSERT INTO security_images (insertdate, referenceid, hiddentext) VALUES (now(), '".$referenceid."', '".$textstr."')");
$db->query("DELETE FROM security_images WHERE insertdate < date_sub(now(), interval 1 day)");
exit;
?>
Bura belli kısımları açıklamak istiyorum. refıd değişkeni ile gösterilecek kodun şifrelenmiş halini alıyoruzç t değişkeni ile de kaç karakter göstereceğimizi belirliyoruz. Burda gördüğünüz gibi db değişkeni kullanım bunun için PHP ile Database İşlemleri dökümanına göz atmanız gerekmektedir. İhtiyacınız olan font ve resim dosylarını aşağıdaki linkten indirebilirsiniz.
Font and PNG Dosyaları için tıklayın
Daha sonra bu dosyamızı nasıl kullanacağımızı bir örnek ile görelim.
<?PHP
$refid = md5(mktime()*rand());
$check = TRUE;
if(isset($_POST['submit']))
{
$secCheck = $db->query("SELECT ID FROM security_images WHERE referenceid = ".$db->check($_POST['security_refid'])." AND hiddentext= ".$db->check($_POST['security_try']));
if(!$db->sql_num_rows()>0) $check = FALSE;
if($check == TRUE) {
// do what ever you want here
}
}
$refid = md5(mktime()*rand());
?>
<?PHP if($check == FALSE) echo "Lutfen guvenlik kodunu kontrol edin!"; ?>
<form action="index.PHP" method="post">
ID : <input type="text" name="id"><br>
Şifre : <input type="password" name="password"><br>
Kodumuz : <img src="securityimage.PHP?refid=<?PHP echo $refid; ?>" align="absmiddle"><br>
<input type="hidden" name="security_refid" value="<?PHP echo $refid; ?>">
Kodu Giriniz : <input name="security_try" type="text" id="security_try" size="10" maxlength="10"><br>
<input type="submit" name="submit" value="gönder">
</form>
Gördüğünüz gibi HTML img taginde securityimage.PHP dosyasına refıd değişkenini gönderiyoruz. Daha sonra yukarıda gördüğünüz gibi güven kodu kontolu yaparak istediğimiz işleme geçiyoruz.










