sitelerimizde kullandığımız iletişim formu gibi ziyaretçi ya da kullanıcılardan bilgi almak amacıyla hazırladığımız formlarımıza dadanan botlar ve gereksiz yere saçma saçma mesaj yazma zahmetine katlanıp uğraşan kişilerin işini zorlaştıran şimdiye kadar bulduğum en basit resimli güvenlik kodu uygulaması.
güvenlik.php
function olustur () {
bu satırda olustur(); fonksiyonumuzu tanımlıyoruz
$sifre = substr(md5(rand(0,999999999999)),-6);
bu satırda rasgele rand() fonksiyonu ile üretilen degerin md5() fonksiyonu ile şifreleyip subtr() fonksiyonu ile oluşan degerin son 6 karakterini alıp $sifre değişkenimize atıyoruz..
if ($sifre) {
satırı ile $sifre değişkenimiz doğru döndüyse yani bir deger elde edildiyse işlemlere başla dedik
session_start();
oluşan degeri bir oturum değişkenine kaydedebilmek için oturumumuzu başlattık
$_SESSION["guv"] = $sifre;
bu satırda oluşan degerimizi $_SESSION["guv"] oturum değişkenimize atadık. Böyle yapmamızın nedeni diğer sayfalarda buna ulaşabilmek. Eğer ki oluşan değeri bir txt yada benzeri bişeyde tutsaydık bunu bulup güvenliğimizi delip geçebilirlerdi...
$width = 100;
$height = 30;
bu iki satırda ise oluşturacağımız resmin en ve boy ölçümlerini belirledik yani resmimiz 100x30 boyutlarında olucak...
$resim = ImageCreate($width,$height);
bu satırda ImageCreate(); fonksiyonu ile belirlediğimiz ölçülerde bir resim yaratıp bunu $resim değişkenine atıyoruz...
$beyaz = ImageColorAllocate($resim, 255, 255, 255);
bu satırda ise ilerde kullanabilmek için bir renk tanımladık ve rengimizi $beyaz değişkenine atıyoruz...
$rand = ImageColorAllocate($resim, rand(0,255), rand(0,255), rand(0,255));
bu satırda da bi önceki işlem gibi bir renk tanımladık fakat farklı olarak bu satırda tanımladığımız renk sürekli değişen bir renktir. isterseniz siz bu 2 satırda başka renkleri deneyebilirsiniz...
ImageFill($resim, 0, 0, $rand);
bu satırımızda ImageFill() fonksiyonu kullanarak oluşturmuş olduğumuz resmimizin arkaplan rengini belirledik... Ve bu sürekli değişen bir arkaplan olucaktır. dediğim gibi isterseniz siz bunu sabitleyebilirsiniz...
Görüntü koordinatları, sol üst köşeden başlar (x=0, y=0). Görüntünün sağ alt köşesi ise x=$width y=$height dir. Tipik grafik standartının tam tersi olduğu için bunu unutmayınız...
ImageString($resim, 5, 24, 7, $_SESSION["guv"], $beyaz);
bu satırda ise ImageString(); fonksiyonu ile tanımlamış olduğumuz resim dosyasında belirlediğimiz koordinatlara daha önceden elde ettiğimiz kodu resmimizin üzerine yazdırıyoruz.. burda yazılan yazının rengi beyazdır... burda 24,7 x ve y koordinatlarını temsil etmektedir burda font 1 ile 5 arasında değişen bir sayıdır.. Bunlar bir dizi yerleşik fontu temsil etmektedir..
ImageLine($resim, 100, 19, 0, 19, $beyaz);
burda ise oluşturduğumuz resmimize bir çizgi çiziyoruz.. yani maksat biraz daha zorlaştırmak... burdaki 100 19 0 19 değerleri ile oynayabilirsiniz daha değişik çizgiler elde etmek için...
header("Content,type: image/png");
bu satırımızda artık oluşan resmimizin tip'ini belirliyoruz ben png olarak belirledim siz isterseniz jpeg olarak da belirleyebilirsiniz..
ImagePng($resim);
bu satırda ise oluşturduğumuz resmi ekrana basıyoruz...
ImageDestroy($resim);
en son olarak resmimiz için ayrılan belleği boşaltıyoruz...
}
}
ile fonksiyonumuzu sonlandırıyoruz
olustur();
diyerek artık guvenlik.php imizi bitiriyoruz...
form.php
burda dikkatli olmamız gereken oluşan ve değişen resmimizi <img src=guvenlik.php> şeklinde ekrana göstermemizdir eğer siz guvenlik.php yi include edip ardından olustur(); derseniz ekranda resim yerine abuk subuk karakterler görebilirsiniz...
kontrol.php
ilk satırda oturum başlatıyoruz $_SESSION["guv"] oturum değişkenine erişebilmek ve oturum kontrolü için....
if (empty($_POST["kod"]) || empty($_SESSION["guv"]) || !$_SESSION["guv"]) {
bu satırda bazı kişilerin direk güvenlik kodumuzu geçmelerini engellemek için yazdığımız bir dizi güvenlik satırı yazdık...
empty() fonksiyonu ile kod değişkenin gelip gelmediği aynı şekilde $_SESSION["guv"] oluşup oluşmadığı ya da !$_SESSION["guv"] ile ziyaretçi için bir oturum kaydedilmiş mi diye bakıyoruz.. eğer bunlar olmamış ise ekrana form sayfasına gitmeleri için yönlendirme linkini yazdırıyoruz....
Eğer kişi form doldurmuş ise devreye
if ($_POST["kod"] == $_SESSION["guv"]) {
satırı giriyor. burda formdan gelen kod değeri ile oluşan ve session değişkeninde sakladığımız değerleri karşılaştırıyoruz eğer bu 2 deger birbiri ile uyuşuyorsa eşit ise ziyareçiyi bilgilendiriyoruz ve ardından unset() fonksiyonu ile oluşturduğumuz session oturum değişkenini sonlandırıyoruz yani içeriğini yok ediyoruz ve programımızı sonlandırıyoruz..
Eğer gelen değer ile session'da sakladığımız değerler birbirine eşit değilse ziyaretçiyi uyarıyoruz...
Evet bir güvenlik kod uygulaması mantığını anlatmaya çalıştım bu basit bir resim ortaya suncaktır. Siz isterseniz dahada karmaşık bir resim elde edebilirsiniz veya arkaplanda renk yerine kendinizin kareli vb resimlerinizi kullanabilirsiniz yada fontları değiştirebilirsiniz...
hazırlayan : Yusuf KOÇ
kaynak : http://www.ceviz.net/index.php?case=article&id=726
güvenlik.php
Kod:
<?
function olustur () {
$sifre = substr(md5(rand(0,999999999999)),-6);
if ($sifre) {
session_start();
$_SESSION["guv"] = $sifre;
$width = 100;
$height = 30;
$resim = ImageCreate($width,$height);
$beyaz = ImageColorAllocate($resim, 255, 255, 255);
$rand = ImageColorAllocate($resim, rand(0,255), rand(0,255), rand(0,255));
ImageFill($resim, 0, 0, $rand);
ImageString($resim, 5, 24, 7, $_SESSION["guv"], $beyaz);
ImageLine($resim, 100, 19, 0, 19, $beyaz);
header("Content,type: image/png");
ImagePng($resim);
ImageDestroy($resim);
}
}
olustur();
?>
function olustur () {
bu satırda olustur(); fonksiyonumuzu tanımlıyoruz
$sifre = substr(md5(rand(0,999999999999)),-6);
bu satırda rasgele rand() fonksiyonu ile üretilen degerin md5() fonksiyonu ile şifreleyip subtr() fonksiyonu ile oluşan degerin son 6 karakterini alıp $sifre değişkenimize atıyoruz..
if ($sifre) {
satırı ile $sifre değişkenimiz doğru döndüyse yani bir deger elde edildiyse işlemlere başla dedik
session_start();
oluşan degeri bir oturum değişkenine kaydedebilmek için oturumumuzu başlattık
$_SESSION["guv"] = $sifre;
bu satırda oluşan degerimizi $_SESSION["guv"] oturum değişkenimize atadık. Böyle yapmamızın nedeni diğer sayfalarda buna ulaşabilmek. Eğer ki oluşan değeri bir txt yada benzeri bişeyde tutsaydık bunu bulup güvenliğimizi delip geçebilirlerdi...
$width = 100;
$height = 30;
bu iki satırda ise oluşturacağımız resmin en ve boy ölçümlerini belirledik yani resmimiz 100x30 boyutlarında olucak...
$resim = ImageCreate($width,$height);
bu satırda ImageCreate(); fonksiyonu ile belirlediğimiz ölçülerde bir resim yaratıp bunu $resim değişkenine atıyoruz...
$beyaz = ImageColorAllocate($resim, 255, 255, 255);
bu satırda ise ilerde kullanabilmek için bir renk tanımladık ve rengimizi $beyaz değişkenine atıyoruz...
$rand = ImageColorAllocate($resim, rand(0,255), rand(0,255), rand(0,255));
bu satırda da bi önceki işlem gibi bir renk tanımladık fakat farklı olarak bu satırda tanımladığımız renk sürekli değişen bir renktir. isterseniz siz bu 2 satırda başka renkleri deneyebilirsiniz...
ImageFill($resim, 0, 0, $rand);
bu satırımızda ImageFill() fonksiyonu kullanarak oluşturmuş olduğumuz resmimizin arkaplan rengini belirledik... Ve bu sürekli değişen bir arkaplan olucaktır. dediğim gibi isterseniz siz bunu sabitleyebilirsiniz...
Görüntü koordinatları, sol üst köşeden başlar (x=0, y=0). Görüntünün sağ alt köşesi ise x=$width y=$height dir. Tipik grafik standartının tam tersi olduğu için bunu unutmayınız...
ImageString($resim, 5, 24, 7, $_SESSION["guv"], $beyaz);
bu satırda ise ImageString(); fonksiyonu ile tanımlamış olduğumuz resim dosyasında belirlediğimiz koordinatlara daha önceden elde ettiğimiz kodu resmimizin üzerine yazdırıyoruz.. burda yazılan yazının rengi beyazdır... burda 24,7 x ve y koordinatlarını temsil etmektedir burda font 1 ile 5 arasında değişen bir sayıdır.. Bunlar bir dizi yerleşik fontu temsil etmektedir..
ImageLine($resim, 100, 19, 0, 19, $beyaz);
burda ise oluşturduğumuz resmimize bir çizgi çiziyoruz.. yani maksat biraz daha zorlaştırmak... burdaki 100 19 0 19 değerleri ile oynayabilirsiniz daha değişik çizgiler elde etmek için...
header("Content,type: image/png");
bu satırımızda artık oluşan resmimizin tip'ini belirliyoruz ben png olarak belirledim siz isterseniz jpeg olarak da belirleyebilirsiniz..
ImagePng($resim);
bu satırda ise oluşturduğumuz resmi ekrana basıyoruz...
ImageDestroy($resim);
en son olarak resmimiz için ayrılan belleği boşaltıyoruz...
}
}
ile fonksiyonumuzu sonlandırıyoruz
olustur();
diyerek artık guvenlik.php imizi bitiriyoruz...
form.php
Kod:
<? session_start(); ?>
<form method="POST" action="kontrol.php">
<img src="guvenlik.php"><br>
Güvenlik Kodu:<input type="text" name="kod"><br>
<input type="submit">
</form>
burda dikkatli olmamız gereken oluşan ve değişen resmimizi <img src=guvenlik.php> şeklinde ekrana göstermemizdir eğer siz guvenlik.php yi include edip ardından olustur(); derseniz ekranda resim yerine abuk subuk karakterler görebilirsiniz...
kontrol.php
Kod:
<?
session_start();
if (empty($_POST["kod"]) || empty($_SESSION["guv"]) || !$_SESSION["guv"]) {
echo "<a href=form.php>Lütfen Form Sayfasına Gidiniz..</a>";
} else {
if ($_POST["kod"] == $_SESSION["guv"]) {
echo "Güvenlik Kodu Doğru...";
unset($_SESSION["guv"]);
exit;
} else {
echo "<a href=form.php>Güvenlik Kodu Hatalı Lütfen Yeniden Deneyiniz...</a>";
}
}
?>
ilk satırda oturum başlatıyoruz $_SESSION["guv"] oturum değişkenine erişebilmek ve oturum kontrolü için....
if (empty($_POST["kod"]) || empty($_SESSION["guv"]) || !$_SESSION["guv"]) {
bu satırda bazı kişilerin direk güvenlik kodumuzu geçmelerini engellemek için yazdığımız bir dizi güvenlik satırı yazdık...
empty() fonksiyonu ile kod değişkenin gelip gelmediği aynı şekilde $_SESSION["guv"] oluşup oluşmadığı ya da !$_SESSION["guv"] ile ziyaretçi için bir oturum kaydedilmiş mi diye bakıyoruz.. eğer bunlar olmamış ise ekrana form sayfasına gitmeleri için yönlendirme linkini yazdırıyoruz....
Eğer kişi form doldurmuş ise devreye
if ($_POST["kod"] == $_SESSION["guv"]) {
satırı giriyor. burda formdan gelen kod değeri ile oluşan ve session değişkeninde sakladığımız değerleri karşılaştırıyoruz eğer bu 2 deger birbiri ile uyuşuyorsa eşit ise ziyareçiyi bilgilendiriyoruz ve ardından unset() fonksiyonu ile oluşturduğumuz session oturum değişkenini sonlandırıyoruz yani içeriğini yok ediyoruz ve programımızı sonlandırıyoruz..
Eğer gelen değer ile session'da sakladığımız değerler birbirine eşit değilse ziyaretçiyi uyarıyoruz...
Evet bir güvenlik kod uygulaması mantığını anlatmaya çalıştım bu basit bir resim ortaya suncaktır. Siz isterseniz dahada karmaşık bir resim elde edebilirsiniz veya arkaplanda renk yerine kendinizin kareli vb resimlerinizi kullanabilirsiniz yada fontları değiştirebilirsiniz...
hazırlayan : Yusuf KOÇ
kaynak : http://www.ceviz.net/index.php?case=article&id=726