Web Tasarım

PHP İle Güvenlik Kodu Oluşturma ve Kontrolünü Sağlamak

İşlerimden dolayı uzun zamandır makale yazamıyordum. Bu makalede sizlere PHP yardımı ile bir resimli güvenlik kodu (captcha) üretip bu kodun doğru ise şu işlemleri yanlış ise şu işlemleri yapmasını isteyeceğiz. Tabi makaleye geçmeden önce neden böyle bir şeye ihtiyaç duyacağımıza bir değinelim. Şöyle düşünelim. Web sitenizde bir form oluşturdunuz bu forma kullanıcıların girdiği bilgiler ya veritabanınıza kaydolacak; yada  size bir mail gönderecektir. Normal bir kullanıcı bu formu kullanıp size gerekli bilgileri iletecektir. Bizim sorunumuz şurada başlıyor. Kötü amaçla siteye girenler için önlem almak. Biri bu formu belli başlı programlar kullanarak veritabanınıza dakikalar içinde milyonlarca kayıt oluşturabilir. Mail olarak kullanıyorsanız (Genelde 1 saat içinde hostlar 100 maile izin veriyor.) sürekli mail kutunuza mesajlar geliyor olabilir. Spam içerikli mesajlar size iletiliyor olabilir. Bu tür sorunları önlemek için ise captcha yani resimli güvenlik kodu üretip bu kodu doğru giren kullanıcıların verilerinin işlenmesini yanlış giren kullanıcıların ise kodu doğru girmeleri gerektiği ile ilgili bir uyarı mesajı döndüreceğiz.



Güvenlik Kodunu Üretme

Güvenlik kodu üretmek için bir adet guvenlikod.php adında bir sayfa oluşturalım ve içine şu kodları girelim.

<?php
session_start();
function generateCode($characters=4) {
//Kullanmak istediginiz karakterleri girelim
$possible = '23456789bcdghjkmnpqrstvwyz';
$code = '';
for ($i=0;$i < $characters;$i++) {
$code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
}
return $code;
}

function create($characters=4,$width='120',$height='35') {
// rastgele bir kod uretelim ve alttaki font degeri icin bir font dosyasi olusturup kullanalim
$code = generateCode($characters);
$font = 'arial.ttf';

// Yazı tipi ve ebat ayar,i
$font_size = $height * 0.75;
$image = @imagecreate($width, $height) or die('Cannot initialize new GD image stream');

// Renkler kismi burda renkler RGB olarak kodlanmistir
$background_color = imagecolorallocate($image, 220, 220, 220);
$text_color = imagecolorallocate($image, 10, 30, 80);
$noise_color = imagecolorallocate($image, 150, 180, 220);

//arka planda karisiklik yapalim rastgele noktlar falan olusturalim
for( $i=0; $i<($width*$height)/3; $i++ ) {
imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), 1, 1, $noise_color);
}

//arka planda karisiklik yapalim rastgele cizgiler falan olusturalim
for( $i=0; $i<($width*$height)/150; $i++ ) {
imageline($image, mt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $noise_color);
}

//metin kutusu olusturup metimizi yazdiralim
$textbox = imagettfbbox($font_size, 0, $font, $code) or die('Error in imagettfbbox function');
$x = ($width - $textbox[4])/2;
$y = ($height - $textbox[5])/2;
$y -= 5;
imagettftext($image, $font_size, 0, $x, $y, $text_color, $font , $code) or die('Error in imagettftext function');

// tarayiciya resim olarak tanitalim
header('Content-Type: image/jpeg');
imagejpeg($image);
imagedestroy($image);

// sesiona alip istedigimiz yerde bu kodu kullanalim
$_SESSION['uretilen_kod']=$code;
}
// kodumuzu create diyerek olusturalim
create();
?>

Kodumuzu yukarıda ne işe yaradıklarını anlattım. Çalışıp çalışmadığını siteadi.com/guvenlikkod.php ile kontrol edebilirsiniz. Şimdi bu kodumuzu formumuza ekleyelim. Basit bir form oluşturuyorum

<form>
<p>güvenlik kodunu giriniz</p>
<img src="guvenlikkod.php">
<input type="text" name="gokod" id="gokod">
<input type="submit" name="gonder" id="gonder" value="Gönder" >
</form>

Burada önemli olan husus post yöntemini kullanacağımız için güvenlik kodunun girildiği kutuya id ve name kısımlarına gokod dedim ki kontrol aşamasında buraya baksın doğrumu yanlış mı diye.

Güvenlik Kodumuzu Doğrulamasını Sağlamak

Evet buraya kadar güvenlik kodumuzu oluşturduk ve formumuza ekledik. Sitemizde güvenlik kodu çalışıyor ve bu kodu doğru giren kişiler sadece bana veri göndermesini istiyorsam ne yapacağız ona bakalım birde.

<?php

if($_POST){

//kontrol edelim
if($_POST['gokod']==$_SESSION['uretilen_kod']){

//bu satırı silin kod dogru ise çalıştırmak istediğiniz kodu buraya yazınız.

}
else{
echo '<div style="background-color:red"><span style="color: white">Güvenlik kodunu yanlış girdiniz Lütfen kontrol ediniz!</span></div>';
}
}
?>

İşlem bu kadar. İşinize yaraması umuduyla. Örnek güvenlik kodu üreten dosyayı indirmek için aşağıdaki bağlantıyı kullanabilirsiniz.

Yorum Yaz

*E-mail adresiniz gizli kalacaktır.

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.

Öneriler

Yeni Makaleler