Php İle Güvenlik Kodu Üretme

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_koda']=$code;
}
// kodumuzu create diyerek olusturalim
create();
?>

Kodmuzu 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 Tıkla

Tarih:
Hit: 4381
Yazar: x-files

Taglar: programlama


Yorumlar


Yorum yapabilmek için üye girişi yapmalısınız.

Yorumlar

x-files tarafından yazıldı. Tarih: 13/Eyl/18 17:21
@trampfd biz daha yeni öğreniyoruz php yi :D
trampfd tarafından yazıldı. Tarih: 30/May/18 03:57
cocuklugum geldi aklima, 2000 lerin basina dondum bir an...
tereke34 tarafından yazıldı. Tarih: 10/May/18 21:03
mükemmelll
BenSen tarafından yazıldı. Tarih: 05/May/18 10:16
+1
NighT_JudGe tarafından yazıldı. Tarih: 23/Nis/18 11:01
emeğine sağlık güzel olmuş
d3lete tarafından yazıldı. Tarih: 19/Nis/18 07:12
Eline sağlık hocam
x-files tarafından yazıldı. Tarih: 18/Nis/18 14:07
Rica ederim üstad
eagleofcondor tarafından yazıldı. Tarih: 17/Nis/18 00:28
teşekkürler hocam sağolasın