chat eczaonline.com yazılım uzmanı gaziantep web tasarım

basit güvenlik kodu

Katılım
3 Şub 2005
Mesajlar
1,607
Beğeniler
1
Konum
Neverland
#1
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

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
 
S

Sephiroth

#8
Güvenlik kodu kullanmanın artık modası geçti hem vakit kaybı hemde kullanıcıyı zorlamış oluyor.

Onun yerine en mantıklısı Flood kontroldür.

Bir örnek verecek olursak;

PHP:
<?
session_start();
?>
<form action="kayit.php" method="POST">
Mail adresi: <input type="text" name="mail"> <input type="submit" value="Kayıt et">
</form>

<?
if ($_POST[mail]) {
 if ($_SESSION[kontrol]+60>time()) { //Flood önleyici kontrol
   echo "60 saniye dolmadan 2. bir kayıt yapamazsınız";
   die();
 }
 $mail=$_POST[mail];
 $ekle=mysql_query("insert into mail_tablo values ('','$mail')");
 $_SESSION[kontrol]=time(); //Flood kontrolümüz burada zamana indeksleniyor.
 echo "Başarı ile eklendi";
}
?>
 
Katılım
27 Ara 2007
Mesajlar
2,109
Beğeniler
1
Yaş
29
Konum
cHeteM
#9
merhabalar konuyu biraz hortlatacam konu açmaktansa burdan yazmayı tercih ettim

güvenlik kodunda arkaplandaki rengi sabit yapsak güvenlik kodunun zorluk derecesini azaltır mı botlara karşı?
 

Ozcan

Müptela
Katılım
12 May 2007
Mesajlar
3,749
Beğeniler
59
Yaş
39
Konum
Antalya
#10
merhabalar konuyu biraz hortlatacam konu açmaktansa burdan yazmayı tercih ettim

güvenlik kodunda arkaplandaki rengi sabit yapsak güvenlik kodunun zorluk derecesini azaltır mı botlara karşı?
botları o kadar detaylı ürettiklerini bilmiyordum resimlerin üzerinde renkleri okuyarak tahmin edip kodu bulup yazıyormu diyosun ?
 
Katılım
27 Ara 2007
Mesajlar
2,109
Beğeniler
1
Yaş
29
Konum
cHeteM
#11
renkleri okumuyorlar. ama algıda değişme olur mu diye soruyorum? yukardaki örnekte arka planın değişken olması sadece bir görsellik olsa gerek
 
Katılım
27 Ara 2007
Mesajlar
2,109
Beğeniler
1
Yaş
29
Konum
cHeteM
#13
renklerin değişken kalıp kalmaması bir şey fark ettirir mi ? en azından bir derecede renklerin değişken olması botları zorlar mı?
 

Ozcan

Müptela
Katılım
12 May 2007
Mesajlar
3,749
Beğeniler
59
Yaş
39
Konum
Antalya
#14
botun sürekli senin sitene peş peşe kod ekliyeceğini zannetmiyorum zaten çoğu bot bir kere yazı gönderir spam olduğu anlaşılmasın diye arka planın sabit kalmamasının pek bir önemi yok diye düşünüyorum ama sen bilirsin.
 

Angelo

Onursal Üye
Katılım
13 Ara 2004
Mesajlar
9,603
Beğeniler
111
Yaş
37
Konum
AZ
#15
Sabit olduktan sonra rengininin önemi yok. Değişken renkte olması önemli. Botun yapacağı da resmi piksel piksel okuyup renk değişimlerine göre bir desen çizmek kafasında. Arkaplan sabit olduğunda çok basit bir şekilde harflerin nerede olduğunu görebilir. Arka planı değişken, araya eğik çizgiler koyarak çizmek daha zorlaştırır.
 

Raiden

Profesyonel
Katılım
13 Ocak 2005
Mesajlar
339
Beğeniler
0
Yaş
34
#17
bu güvenlik kodunu 2006 gibi ceviz.net'te yazmıştım. isterseniz güvenlik kodu yerine soru-cevap şekline çevirin örneğin;

Türkiyenin Başkenti ? - Ankara

gibi. Böyle olunca botlar bunları aşamayacaklardır. Güvenlik kodunu aşmak için aslında o anki formun bir ekran görüntüsünü alıp botu yazana posta veya bi şekilde yolluyor kişi de parametreyle kodu girip geçiyor böyle yani..
 
Katılım
27 Ara 2007
Mesajlar
2,109
Beğeniler
1
Yaş
29
Konum
cHeteM
#18
ellerine sağlık Raiden orda da makalelerinle karşılaşıyorum. ama soru cevap yerine güvenlik kodu kullanmam gerek çok dilli bir site olacağı için güvenlik kodu daha iyi oluyor
 

Ozcan

Müptela
Katılım
12 May 2007
Mesajlar
3,749
Beğeniler
59
Yaş
39
Konum
Antalya
#19
bence angelonun dediği gayet mantıklı arka planın çizgili olması. Bu facebook taki gibi güvenlik kodu veren bir site vardı bende onu araştırıyordum bir ama sonra başka bir projeye yönelmem gerekti. Sanırım siteye üye olunduğunda o facebook ta çıkan güvenlik kodunu sağlıyordu site için tam detaylı öğrenemedim tabiki. Site adresini bulabilirsem yazarım.
 

Bu konuyu okuyanlar (Üyeler: 1, Misafirler: 0)

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur. iyinet.com sayfalarında yer alan yazı, görsel ve linklerle ilgili hukuki şikayetleriniz için Buradan iletişime geçmeniz durumunda, ilgili kanunlar ve yönetmelikler çerçevesinde en geç 7 gün içerisinde iyinet yönetimince tarafınıza dönüş sağlanacaktır. Betcup Artemisbet Forum canlı bahis sohbet - - chat
Üst