İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

basit güvenlik kodu

pembekedi

0
İyinet Üyesi
Katılım
3 Şubat 2005
Mesajlar
1,607
Reaction score
1
Konum
Neverland
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
 

iyinet

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,028
Reaction score
63
Konum
Sakarya
Paylasim icin tesekkurler, rep verme yetkim olsaydi +rep verirdim.
 

dsgnr

0
İyinet Üyesi
Katılım
22 Mart 2006
Mesajlar
1,144
Reaction score
1
Konum
dev
ben veriim :)

saol pembekedi. biraz uzun olmuş ama ii olmuş
 

trextra

0
İyinet Üyesi
Katılım
4 Mart 2005
Mesajlar
5,290
Reaction score
0
Konum
Kadıköy
PHP ile alakam olmasada çoğunluk php ci burada. Çok işe yarayacaktır teşekkürler ;)
 

Raiden

0
İyinet Üyesi
Katılım
13 Ocak 2005
Mesajlar
339
Reaction score
0
boş bi anımda yapmıştım beğenmenize sefindim..
 
S

Sephiroth

Misafir
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";
}
?>
 

...::LorD::...

0
İyinet Üyesi
Katılım
27 Aralık 2007
Mesajlar
2,109
Reaction score
1
Konum
cHeteM
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

0
İyinet Üyesi
Katılım
12 Mayıs 2007
Mesajlar
3,749
Reaction score
59
Konum
Antalya
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 ?
 

...::LorD::...

0
İyinet Üyesi
Katılım
27 Aralık 2007
Mesajlar
2,109
Reaction score
1
Konum
cHeteM
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
 

i.ari

0
İyinet Üyesi
Katılım
16 Aralık 2006
Mesajlar
4,437
Reaction score
6
Konum
Ankara
botlar bunlarıda okumayı becerebiliyor.
Baya gelişmiş versiyonları mevcut
 

...::LorD::...

0
İyinet Üyesi
Katılım
27 Aralık 2007
Mesajlar
2,109
Reaction score
1
Konum
cHeteM
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

0
İyinet Üyesi
Katılım
12 Mayıs 2007
Mesajlar
3,749
Reaction score
59
Konum
Antalya
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

0
İyinet Üyesi
Katılım
13 Aralık 2004
Mesajlar
9,603
Reaction score
111
Konum
AZ
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

0
İyinet Üyesi
Katılım
13 Ocak 2005
Mesajlar
339
Reaction score
0
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..
 

...::LorD::...

0
İyinet Üyesi
Katılım
27 Aralık 2007
Mesajlar
2,109
Reaction score
1
Konum
cHeteM
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

0
İyinet Üyesi
Katılım
12 Mayıs 2007
Mesajlar
3,749
Reaction score
59
Konum
Antalya
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.
 

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.

Backlink ve Tanıtım Yazısı için iletişime geçmek için Skype Adresimiz: .cid.1580508955483fe5

Üst