Tweet

PHP | GD ile Güvenlik

GD nedir?
GD php 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. [...] Bizde 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ığı kod 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.

CODE:
<?
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.

CODE:
<?
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.

CODE:
<? 
$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.


Dia
okanatabag@gmail.com
2 Ocak 2006 13:54

İlgili Olabilecek Makaleler


Yorumlar (3)





superselo
29 Ekim 2008 01:30
Eline, emeğine sağlık teşekkürler. Güzel bir anlatım olmuş.


tolgahanın
28 Kasim 2009 10:40
gerçekten açıklayıcı bir anlatım olmuş


insider54
18 Eylul 2010 14:37
Öncelikle paylasım için tesekkurler. Pek Bu konuyla alakası yok ama "php_gd2.dll" ini Delphi de nasıl kullana bilirim bi bilginiz war mı acaba? Warsa "İnsider_1984@hotmail.com" adresine yollayabilirmisiniz?

Ziyaretçi olarak yorum yazamazsınız. Üye olmak için tıklayın Üye iseniz giriş yapın.



MENÜ » FORUM
Menü » Takip et
RSS Facebook Twitter Friendfeed
Sık Kullanılanlar Google Yahoo Live
Menü » Paylaş
E-Posta ile gönder Twitter Facebook Friendfeed
Buzz Stumbleupon Delicious Digg