Php ile Güvenlik Doğrulama Kodu (Captcha)

Categories: Php
Comments: 8 Comments
Published on: 24 Mayıs 2011


Merhaba Arkadaşlar;

herkesin pratik olarak web sitelerinde kullanabileceği bir php güvenlik doğrulama sistemi paylaşıyorum.

birçok sitede farklı örnekleriyle karşılaşabilirsiniz.
basite indirgenmiş haliyle sizlerle paylaşıyorum. daha fazla geliştirmek size kalmış.
takıldığınız noktalar olursa yardımcı olmaktan keyif duyacağım.

örnek sayfa için tıklayın.

Kaynak Dosyalarını İndirmek İçin Tıklayın.

Kullanımı

formlarınızı kullandığınız sayfa içerisinde herhangi bir include işlemi yapmanıza gerek yok.

formunuzun bulunduğu sayfada bir script kodu ve güvenlik resmini çağıran image yolunu gömmeniz yeterli olacaktır.

Javascript kodu:

1
2
3
4
5
6
7
<script language="javascript"/>
 function ChangeCode(){
 var NewSecurity= "<img src='security.php?rnd="+Math.random()+"' alt='guvenlik' style='border: 1px solid #999999;' />";
 $("#security").html(NewSecurity);
 return false;
 }
</script>

 

Form Üzerindeki image yolu

1
<img src="security.php" alt="guvenlik" style="border: 1px solid #999999;" />

 

Kaynak kodlarını indirip incelediğinizde kullanımı hakkında daha fazla bilgi alabilirsiniz.
kullanımı ve geliştirmesi hakkında takıldığınız noktalar olursa konu altından yazabilirsiniz.

8 Comments - Leave a comment
  1. sezgin diyor ki:

    Öncelikler eline sağlık.

    Kodu incelediğimde

    security.php?rnd=”+Math.random()”

    Bu şekilde olan bir satır var. Burda Math.random() ne işe yaıyor. Bunu sildiğimde de herhangi bir sorun çıkmadı. Zaten güvenlik kodunu security.php üretmiyor mu? Ayrıca Math.random() neden kullandık?

    • ilham diyor ki:

      Teşekkür ederim.
      Oradaki randomun kullanım amacı şudur;
      Yenile resmine tıklandığında karşımıza yeni bir kodun gelmesini bekliyoruz. Eğer rand fonksiyonunu kaldırıp gönderirsek bize farklı bir kod vermeyecektir çünkü aynı sayfayı tekrar tetiklemiş olacağız. Rand eklediğimizde her tıklamada farklı bir sayı üretip göndereceği için bize farklı bir kod verecektir. Bir nevi versiyonlama diyebiliriz.

  2. gökhan diyor ki:

    Math.random() kullanılmasının nedeni tarayıcının önbelleğinden kurtulmaktır. Math.random() kullanılmasza security.php daha önceden resim olarak tarayıcının önbelleğine kaydedilmiştir. bu kod ile sanki herseferinde farklı bir resim dosyası istiyormuşuz gibi yapıyoruz.çünkü resmin adresi (url) değişti.

    bu arada scriptteki yazıların eğik olması şu haliyle hiç bir anlam içermiyor. eğim oranları sabit olduğu için saldırgan resimdeki kodları rahatlıkla okutabilir. e bide karakter fontu sabit ve çok bilinen bir font. şu haliyle bu güvenlik kodu pek işe yaramayacaktır.

    önerim:
    eğer eğim kullanılacaksa her karakter için random bir eğim belirleyin. karakterlerin birbirine bir şekilde temas etmesini sağlayın. gerekirse bir karakterin bir kısmı diğer karakterin üzerine gelebilir. bu insan için sorun değil. kişi M üzerine gelmiş T’yi okur ama bilgisayar okumaz. font olarak birden fazla (10 tane mesela) font kullanın. bilinen fontlar olmasın. hatta bence kendi fontunuzu kendiniz yapın. kimseye de vermeyin. oluşacak resmin üzerine noktalar çizgiler atın. anlamsız şekiller çizin. tabi bu okunabilirliği yok etmeyecek düzeyde olmalı ama saldırgan sistemin okumasını da en azından zorlaştırmalı.

    • ilham diyor ki:

      Artı bilgilendirme için teşekkür ederim. Söyledikleriniz kesinlikle güvenliği arttıracak ve önemli ekler. Bu konu zaten full güvenlik sağlayan bir kod değil sadece arkadaşlara örnek olması amacıyla yazıldı. Geliştirmek kullanacak arkadaşlara bağlı ki yazılım geliştirme ve birşeyler öğrenmede bu şekilde olmalı. Tekrar teşekkür ederim

  3. Php Manual diyor ki:

    Yazılan kodda ciddi bir güvenlik açığı var :)

    şöyleki kişi oturum almamışsa bu güvenlik açığından faydalanabılıyor.

    nasıl test ederim diyorsan soyle http://www.ilhamdeneri.com/ornekler/guvenlik-kodu/ adresine girdikten sonra butun cerezlerını temızle ve formu bos gonder ve guvenlık dogru mesajını alacaksın cunku bos = bos :)

    • ilham diyor ki:

      Eyvallah :)
      testtekini düzenledim.
      indiren arkadaşlar indirdikleri dosyada session içerisinde key in olup olmadığını kontrol ettikten sonra işlem yaparlarsa bu sıkıntıyı aşarlar.

  4. Kipnos diyor ki:

    Teşekkür ederim, güzel bir çalışma olmuş

    • ilham diyor ki:

      Aslında eksik ama benim de amacım basic olanı verip nasıl işlediğini anlatmaktı sadece,
      yorum için teşekkür ederim

Leave a comment

E-posta hesabınız yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>


Welcome , today is Pazar, 23 Kasım 2014