IRCForumları - IRC ve mIRC Kullanıcılarının Buluşma Noktası
  sohbet

 Kayıt ol  Topluluk
Yeni Konu aç Cevapla
 
LinkBack Seçenekler Stil
Alt 03 Nisan 2012, 19:38   #1
Çevrimdışı
Kullanıcıların profil bilgileri misafirlere kapatılmıştır.
IF Ticaret Sayısı: (0)
IF Ticaret Yüzdesi:(%)
PHP ile Güvenlik Kodu Oluşturmak




Neredeyse irili ufaklı tüm web sitelerinde güvenlik kodlarını görmeniz mümkün. Kullanıcı kaydı yaparken, anket oylarken, bir foruma mesaj yazarken yada bir ziyaretçi defterini doldururken bu uygulama karşınıza çıkabiliyor. Peki bize eziyet etmekten başka ne işe yarıyor?

Aslında bu eziyetin tüm sebebi kendini bilmez birkaç internet kullanıcısı. Bu arkadaşlar çeşitli programlar kullanarak, siteniz için özene bezene hazırladığınız ziyaretçi defterine, foruma vs. birkaç dakika içinde binlerce kayıt girebiliyorlar. Her seferinde bu kayıtları tek tek silmeyi göze alsak bile sitenin asıl kullanıcılarına verdiği rahatsızlığı gidermek mümkün olmuyor.

Diğer yandan, web sitenizin bir yönetim sayfası olduğunu düşünelim. Bir kullanıcı adı ve şifreyle yönetim bölümüne giriş yapılıyor. Bahsi geçen kötü kullanıcılar şifrenizi ele geçirebilmek için farklı saldırılar kullanabilirler. Fakat basit bir güvenlik koduyla bu saldırılardan korunmak mümkün olabilir. Bu tür sorunlardan kurtulmak için site yöneticileri güvenlik kodu uygulamasını kullanmak zorunda kalıyor.

Bu kadar lafın ardından sistemin nasıl çalıştığını anlatmaya başlasam iyi olacak. Mantığı gayet basit. Bu uygulama index.php, resim.php, ve kontrol.php olmak üzere üç dosyadan oluşacak. Adında anlaşılacağı üzere index.php dosyasında kullanıcıya güvenlik kodu gösterilecek ve bu kodun girilmesi istenecek, resim.php dosyasında kullanıcıya gösterilecek güvenlik kodunu resme dönüştüreceğiz, kontrol.php dosyasında ise kullanıcının girdiği kodu kontrol edeceğiz.

Devam etmeden önce hemen belirteyim, bu uygulamayı denemek için sistemde GD kütüphanesi yüklü olmak zorunda, ayrıca SESSION(oturum) komutlarından da faydalanacağız. En azından session hakkında bilgiye sahip olmanız bu makaleyi anlamanız açısından gerekli.

Konumuza dönecek olursak, index.php dosyasında bir session oluşturacağız, rasgele üretilmiş harfler ve rakamlardan oluşan bir değer oluşturacağız daha sonra index.php dosyasından resim.php dosyasında bu sessiona ait id’ yi göndereceğiz.


---------------------------------- index.php ------------------------------------
PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
<?php
session_start
();  // session başlatıyoruz.
$resim_kodu=""// güvenlik kodumuzu tutacak değişken
function rasgele() { // rasgele sayı ve rakam üretmek için bir fonksiyon yazalım.
      
$gecici_deger mt_rand(1,3); // 1 ile 3 arasında rasgele bir sayı alalım.
      // Eğer sayı 1 ise, küçük harf, eğer sayı 2 ise rakam
      // eğer sayı 3 ise büyük harf üreteceğiz
      
switch ($gecici_deger) {
          case 
1:
           
// 97 den 122 ye kadar olan ASCII kodları küçük harflerden oluşur.
          
$gecici_deger mt_rand(97122);
          
// 97 ile 122 arasından rasgele bir değer alıyoruz.
          
break;
          case 
2:
    
// 48 den 57 ye kadar olan ASCII kodları rakamlardan oluşur.
          
$gecici_deger mt_rand(4857);
           
// 48 ile 57 arasından rasgele bir değer alıyoruz.
          
break;
          case 
3:
          
// 65 den 90 e kadar olan ASCII kodları büyük harflerden oluşur.
          
$gecici_deger mt_rand(6590);
           
// 65 ile 90 arasından rasgele bir değer alıyoruz.
          
break;
       }
       
// $gecici_deger değişkeninde bulunan değeri geri döndürüyoruz.
       
return chr($gecici_deger);
}
 
// Elimizde rasgele rakamlar ve harfler üreten bir fonksiyonumuz ve bir session var.
// Geriye bir kod oluşturup  bunu resim olarak göstermek kalıyor.
// Şimdi 4 karakterden oluşan bir güvenlik kodu oluşturalım.
     
for ($i 1$i <= 4$i++) {
             
$resim_kodu.= rasgele();
}
 
// güvenlik kodumuzu elde ettiğimize göre bunu sessiona kaydedelim.
 
$_SESSION['guvenlik_kodu'] = $resim_kodu;
 
// kullanıcının göreceği html kısmını gösterelim.
 
echo '<html><head><title>Güvenlik kodu uygulaması</title></head><body><br>
<form action="kontrol.php" method="POST" name="guvenlik" target="_self">
<table width="500" border="0" cellspacing="0" cellpadding="0" align="center">
  <tr><td>
      <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Lütfen resimde
gördüğünüz kodu, resmin yanındaki kutucuğa giriniz. Eğer kodu tam okuyamıyorsanız F5
tuşuna basarak yeni kodu görebilirsiniz.</font></p>
      <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><img src="resim.php?'
;
// resim.php dosyasının resim oluşturacağını söylemiştim. Daha önceden güvelik kodumuzu
// session içine kaydettirmiştik. Bu güvenlik kodunu resme dönüştürmek için resim.php
// dosyasına hangi session dosyasını kullanması gerektiğini söylüyoruz.
echo session_id();  
// bu satır ile session dosyasının id’ sini resim.php dosyasına iletmiş oluyoruz.
echo '"></font></p>     
        <p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Kodu girin: </font>
          <input name="kod" type="text" id="kod" size="30">
              <input type="submit" name="Submit" value="OK">
        </p>
      <p align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
            <b>Not:</b>Güvenlik kodu büyük küçük harf duyarlıdır!
      </p>
    </td></tr>
</table></form></body></html>'
;
?
"gt;



---------------------------------- index.php ------------------------------------

Bu dosya ile işimizi bitirdik. Güvenlik kodunu tutmak için neden session kullandık derseniz, hem güvenlik hem de fazladan hamallık yapmamak için. Güvenlik kodunu cookie kullanarak, dosya yada veri tabanı kullanarak da tutabilirsiniz ancak cookie kullanıcının bilgisayarında tutulduğu için istediğimiz güvenliği bize sağlayamaz. Dosya veya veri tabanında tutulan kodları ise belirli periyotlarda bizim silmemiz gerekir çünkü yer kaplarlar. Session dosyaları hem sunucuda tutuldukları hem de otomatik olarak silindikleri için ideal bir çözüm.
Session içine kayıtlı olan güvenlik kodundan bir resim oluşturmamız gerekiyor. Bunun için kullanacağımız resim.php dosyasında hangi session dosyasını kullanacağını bildirmiştik.

---------------------------------- resim.php ------------------------------------


PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
<?php
// UYARI: Resim oluşturabilmek için sistemde GD kütüphanesinin kurulu olması gerekir.
 
// daha önce index.php dosyasında oluşturduğumuz sessiona erişmek için session başlatıyoruz.
// sonra bu session içine kaydettiğimiz güvenlik kodunu alıyoruz.
session_start();
$guvenlik_kodu$_SESSION['guvenlik_kodu'];
 
// eni 100, boyu 40 olan bir resim oluşturuyoruz.
$resim=imagecreate(100,40);
 
// ben resim için siyah ve beyaz renklerini kullanacağım.
// diğer renkleri de rgb kodlarını yazarak kullanabilirsiniz.
$resim_siyah imagecolorallocate($resim,0,0,0);
$resim_beyaz imagecolorallocate($resim,255,255,255);
 
// resmin arka planı siyah, yazılar ise beyaz olacak.
// bu komutla resmi siyaha boyuyoruz.
imagefill($resim,0,0,$resim_siyah);
 
 
// güvenlik kodu için 4 karakter kullanmıştık. bu karakterleri tek tek resme yazmaya
// başlıyoruz. ayrıca kullanıcı deli etmek için karakterleri farklı büyüklükte yazıyoruz. :)
// böylece tam bir güvenlik kodu olmuş oluyor. :)
imagechar($resim,4,20,13,$guvenlik_kodu[0],$resim_beyaz);
imagechar($resim,5,40,13,$guvenlik_kodu[1],$resim_beyaz);
imagechar($resim,3,60,13,$guvenlik_kodu[2],$resim_beyaz);
imagechar($resim,4,80,13,$guvenlik_kodu[3],$resim_beyaz);
 
// siyah arka planı olan ve beyaz olarak, bazı karakterlerin büyüklüğü değiştirilerek, güvenlik
// kodu yazılmış resmimizi tarayıcıya gönderiyoruz.
header('Content-type: image/png');
imagepng($resim);
?>

---------------------------------- resim.php ------------------------------------

İşin çoğunu hallettik. Ben güvenlik kodu resmini tarayıcıya gönderirken PNG formatını seçtim. JPG, GIF veya WBMP formatlarını kullanabilirsiniz.

Şimdiye kadar yaptığımız işlemleri kısaca özetlersek, bir güvenlik kodu oluşturduk, bu kodu resme dönüştürdük ve güvenlik kodunun olduğu resmi gösterdik. Şimdi sıra kullanıcının girdiği kodu kontrol etmeye geldi. Bunun için de son dosyamız olan kontrol.php dosyasını kullanacağız.

--------------------------------- kontrol.php -----------------------------------



PHP Kod:   Kodu kopyalamak için üzerine çift tıklayın!
<?php
// tekrar session başlatıyoruz.
session_start();
 
// kullanıcının girdiği kodu alıyoruz.
$girilen_kod $_POST['kod'];
 
// session içinde kayıtlı olan kodu alıyoruz.
$guvenlik_kodu=$_SESSION['guvenlik_kodu'];
 
// bu iki değeri bir biriyle karşılaştırıyoruz.
if ($girilen_kod == $guvenlik_kodu) {
       echo 
'çok beceriklisiniz. doğru kodu girdiniz.';
}
else {
       echo 
'güvenlik kodu hatalı';
}
// artık session dosyasına gerek kalmadı. Dolayısıyla bu dosyayı kaldırabiliriz.
session_unset();
session_destroy();
?>

---------------------------------- kontrol.php -----------------------------------

Güvenlik kodundaki karakter sayısını isteğinize göre arttırabilir yada azaltabilirsiniz. Bunu yaptığınızda gerekli yerleri düzenlemeniz gerekecektir. İşi iyice abartıp karakterleri deforme edebilir, resmin arka planını karmaşık şekillerden veya renklerden oluşturabilirsiniz. Her karakteri farklı farklı renklerden oluşturabilirsiniz. Bu tamamen sizin gereksinimlerinizle alakalı. Makalenin en başında bahsettiğim saldırılara maruz kalıyorsanız bu uygulamayı en basitten en zora doğru uygulamak bence en mantıklı olanı. Hem gereksiz yere uğraşmamış olursunuz hem de kullanıcılar güvenlik kodunu okurken zorlanmazlar.


Bu makale çeşitli kaynaklardan derlenerek toplanmıştır.

 
Alıntı ile Cevapla

IRCForumlari.NET Reklamlar
sohbet odaları reklam ver Benimmekan Mobil Sohbet
Cevapla

Etiketler
güvenlik, ile, kodu, oluşturmak, php


Konuyu Toplam 1 Üye okuyor. (0 Kayıtlı üye ve 1 Misafir)
 

Yetkileriniz
Konu Acma Yetkiniz Yok
Cevap Yazma Yetkiniz Yok
Eklenti Yükleme Yetkiniz Yok
Mesajınızı Değiştirme Yetkiniz Yok

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodu Kapalı
Trackbacks are Kapalı
Pingbacks are Açık
Refbacks are Açık


Benzer Konular
Konu Konuyu Başlatan Forum Cevaplar Son Mesaj
Güvenlik kodu oluşturma Asp Maniack ASP/ASP.NET 0 19 Haziran 2006 16:32
Güvenlik Kodu Nasıl Koyarız? SoS PHP 4 25 Aralık 2005 23:49