Erre
09-10-2006, 22:06
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
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(97, 122);
// 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(48, 57);
// 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(65, 90);
// 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;
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
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(97, 122);
// 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(48, 57);
// 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(65, 90);
// 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;
