Anasayfa » PHP » PHP | GD ile Güvenlik

PHP | GD ile Güvenlik

11 Nisan 2010  |  Yazar: coders  |  Yorum Yok  |  3 kez okundu
Facebook'da Paylaş Twitter'da Paylas FriendFeed'de Paylaş PHP | GD ile Güvenlik

?
GD nin grafik komutlarının bulunduğu kütüphanesidir. Bizde GD nin nimetlerinden yararlanarak veri girişlerinde sitemizin güvenliğini sağlayacağız. Veri girişleri neden güvenlik gerektirsin ki? Çünkü kötü niyetli kullanıcının biri bir script ile sitenizin trafiğini alt üst edebile yada veri tabanınızı sürekli veri göndererek şişirebilir. Bant genişliğinizi bitirebilir. Bide bunların başımız gelmesini istemediğimiz için kullanıcıya rast gele ürettiğimiz bir sayı verip her defasında bu sayıyı text kutusuna girmesini isteriz. Tabi bu sayı text olarak verirsek kötü niyetli kullanıcı copy paste olayı ile yine bize zarar verebilir. Bizde ona sayıyı resim yapıp veririz artık resmi koylayıp text kutusuna yapıştırabiliyorsa helal osun deriz. Şimdi gelelim Bu gelelim bu grafiği nasıl hazırlayacağimıza. Öncelikle php.ini dosyasındaki extension=php_gd2.dll satırının başında ( ; ) olmamasına dikkat edelim Ctrl+f ye basıp gd diye aratın tek bulacağı satır muhtemelen doğru satır olacaktır. Artık gd kütüphanesinin nimetlerinden yararlanabiliriz. Bir önekle dersimize başlayalım. Diyelim ki bir forumumuz var ve üyelerimizin mesaj göndermek istediklerinde resimde yazan güvenlik kodunu text kutsuna girmelerini istiyoruz ve formun gittiği sayfada kullanıcının yazdığı ile grafikte yazan kodumuzu karşılaştırıyoruz. Eğer kodlar aynı ise mesajı veri tabanımızı ekliyoruz. Simdi güvenlik kodumuzu yani grafiğimizi oluşturacak sayfamızı oluşturalım.

Bu sayfayı guvenlik.php olarak kaydedin.

<?

session_start();

/*Bir oturum açtık çünkü başka bir sayfada oluşturulan

 rastgele bir sayıyı session ile bu sayfaya alacağız.  */

$tual = imagecreate(70, 24) or die("Tual oluşturlamadı");

/* imagecreate($x,$y); komutu argüman olarak

resmin boyutlarını alır ve belirtilen boyutlarda bir

 tual yaratır bize şimdi bu tuali işleyelim. */

$background_color = imagecolorallocate($tual, 255, 255, 255);

$text_color = imagecolorallocate($tual, 0,0,0);

/* Tualimizin araka plan rengini beyaz belirledik

ve yazı rengini de siyah olarak belirledik  aynı komutları

 kullandığımız dikkatinizi çekmiştir. Doğru aynı komutları

 kullandık. Bu komutların sadece sırası önemli yani

 text_color ile başlayan satırı background_colordan

 önce kullansaydık arka plan rengimiz siyah olurdur.

 Kendinizi aynen bir resim yapıyor gibi düşünün ilk

 sürülen renk taban olur değilmi? */

imageline($tual,0,6,70,6,1);

imageline($tual,0,14,70,14,1);

imageline($tual,10,0,10,24,1);

imageline($tual,20,0,20,24,1);

imageline($tual,30,0,30,24,1);

imageline($tual,40,0,40,24,1);

imageline($tual,50,0,50,24,1);

imageline($tual,60,0,60,24,1);

/*birazda çizgi çizdik dikey ve yatay olarak ki

 okunması biraz zor olsun değimli güvenlik kodumuzun. :) 

  imageline($tual,$x1,$y1,$x2,$y2) şeklinde argümanlar alır.

Yani çizginin kordinatlarını girmeniz gerekiyor. */

imagestring($tual, 6, 6, 6,  $random_num, $text_color);

/*Şimdi gelelim formun bulunduğu sayfada

rastgele olarak üretip bir oturum değişkeni

olarak kayıt ettiğimiz sayıyı yani $random_num

 değişkenini resmimize yazmaya evet yukarıdaki

 komut bu işi yapıyor.

Kullanılışı da şöyle

imagestring($tual,[font boyutu],[başlangıç X],[başlangıc Y],[yazılacak string], [renk]); */

imagegif($tual);

// Tualimizi gif olarak çerçeveledik yani artık bir resim oldu.

imagedestroy($tual);

/*son olarak ta çalıştığımız belleği temizliyoruz.

Hepsi bu kadar güvenlik kodumuzu grafik olarak hazır. */

?>

Şimdide GD ile güvenliği sağlanan formumuzu oluşturalım.

Bu sayfayı mesaj.php olarak kayıt edin.

<?

session_start();

?>

<html>

<head>

<title>Mesaj</title>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-9"/>

</head>

<body>

   <form name="form" action="mesajislem.php" method="post">

   <table  width="91%" border="0" align="center" cellpadding="1" cellspacing="1">

    <tr>

      <td width="18%" align="right">Başlık:</td>

      <td colspan="2">

          <input name="baslik" type="text" size="87" value="">

        </td>

    </tr>

    <tr>

      <td height="67" rowspan="2" align="right" valign="top">Mesaj:</td>

      <td colspan="2" align="left" valign="top">

          <textarea name="msj" cols="80" rows="10" wrap="VIRTUAL"><textarea>

      </td>

    </tr>

    <tr>

      <td colspan="2" align="left" valign="top">  </td>

    </tr>

    <tr>

      <td height="29" align="right" valign="middle">Güvenlik

          kodu:</td>

      <td width="24%" align="left" valign="top">

       <? /* güvelik kodu   */

        $maxran = 1000000;

// üretilecek maksimum sayı belirleniyor

           $random_num = mt_rand(0, $maxran);

 //0 ile 1000000 arasında mt_rand komutu ile rast gele sayı üretiliyor.

            session_register('random_num');

//üretilen sayı oturum değişkeni olarak kayıt ediliyor.

 /* güvenlik kodu sonu */

?>

  <img src="guvelik.php" align="absmiddle">

<? //Görüldüğü gibi güvenlik.php dosyası bir resim dosyası gibi çağırılıyor. ?>

<input name="g_kod" type="hidden" value="<? echo $random_num ?>"/>

<? // Rastgele olarak ürettiğimiz sayıyı gizli olarak forumdan gönderiyoruz. ?>

 <input name="gir_g_kod" type="text" size="6" maxlength="6"/>

<? // Kullanıcının güvenlik kodunu girmesini istediğimiz text kutusu ?>

                 </td>

      <td width="58%" align="left" valign="top">

                <input name="Gönder" type="submit" value="Gönder"/>

</td>

    </tr>

    <tr>

      <td height="16" colspan="3"></td>

    </tr>

 </table>

</form>

</body>

</html>

Şimdide Güvelik kodunun doğruluğunu kontrol edecek ve mesajı veri tabanına ekleyecek sayfayı hazırlıyalım.

Bu sayfayı mesajislem.php olarak kaydedin.

<?

$baglanti=mysql_connect("host","user","pass") or die("veri tabanına bağlanılamadı");

mysql_select_db($db_name) or die("veri tabanı bulunamıyor");

if($g_kod==$gir_g_kod)

       {

       mysql_query("INSERT IN TO mesaj (id, baslik,msj) VALUES (' ', '$baslik', '$msj')");

       if(mysql_affected_rows())

               {

        echo "Mesajınız Eklenmiştir.";

               }

        else

               {

        echo "Güvenlik kodunu yanlış girdiniz";

        }

?>

Evet hepsi bu kadar artık güvenli bir formunuz var. Bu yöntemi veri girişi yapılan her yerde kullanabilirsiniz.
Tüm Hakları www.thecoders.net e aittir.

Okan ATABAĞ

Facebok'ta Paylaş

Benzer Yazılar

Etiketler: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
avatar

Ahmet Ates

http://www.coders.gen.tr/ 25 yasindayim. Z.K.U Biyomedikal Cihaz Teknolojisi bölümünü okudum, Programlama dilleri arasindan ilgilendiğim ve profesyonel olarak hizmet verdiğim dil Fortran'dir. Web olarak Php,Css ve hazır sistemler olarak Wordpress ve Vbulletine hayranlık besliyorum.

Bu yazı hakkında birşeyler demek ister misiniz?

RSS üzerinden bu yazıya yapılan yorumları takip edin.

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir.

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


Programlama