Asp.Net Captcha Örneği

Aralık 3, 2011

Web sitelerindeki güvenlik resimlerini hepimiz biliriz amaçları sitemize giriş yapmak isteyenin gerçek kullanıcımı yoksa bir bot mu olduğunu anlamaktır.Giriş sayfalarındaki Captcha nasıl yapılır onu inceleyecegiz.Boş bir web sayfasında sadece kullanıcı adı , şifre ve güvenlik resmindeki yazıyı isteyen bir uygulama (uygulamacık) yapıcaz.İlk olarak Visual Studio ‘ da Web sekmesinden ASP.NET Empty Web Application açalım ve projemize sağ tıklayıp Add > New Item diyerek 3 tane web sayfası ekleyelim ben bu sayfalara AnaSayfa , Default ve RetCap.aspx adlarını verdim.Captcha ‘ler aslında boş bir aspx sayfalarına GDI+ yardımı ile çizim yapılması ve bu sayfayı image kontrolünde göstermekten ibarettir.RetCap.aspx sayfamızı bunun için kullanacağız.Default.aspx sayfamızı şu şekilde düzenleyelim

 

 

 

 

 

Captcha resmimizi göstermek için Şifre kısmının altına image kontrolü ekliyoruz daha sonra bu kontrolün ImageUrl özelliğine RetCap.aspx sayfasını atıyoruz. Bu atama işlemi yaptıktan sonra RetCap sayfamızda çizdirme işlemini yapabiliriz.Şimdi RetCap.aspx sayfamız gidelim ve Page_Load event’ine şu kodları yazalım.

 

 

 

 

 

 

 

İlk olarak resmimizin boyutu 120 , 40 olacağı için oluşturduğumuz Bitmap nesnesini buna göre atıyoruz daha sonta Graphics sınıfı yardımı ile oluşturduğumuz bu bmp değişkenimizi FromImage method’una atıyoruz.Arka planımızı g.Clear() method’u yardımı ile temizleyip Color.Lavender rengine boyuyoruz.Ekranda yazdıracağımız rastgele yazıyı şu method yardımı ile oluşturuyoruz

 

 

 

 

Rastgele bir değer oluşturabilmek içinde A ile Z harfleri arasındaki rastgele bir değer alıp değişkenimize ekliyoruz daha sonra döngü bitiminde oluşan random degeri geri döndürüyoruz.  RandomString() method ‘undan gelen rastgele string değeri session’a atamamızın sebebi : arkadaşlar kullanıcı sayfadaki bilgileri doldurup giriş butonuna bastığında kullanıcının güvenlik resmindeki doğru değeri girip girmediğini anlamamızın tek yolu random string değeri oluştuğu zaman o değişkeni bir yerde tutup giriş butonunda karşılaştırmaktır.Bu değişkenin tutulacağı en iyi yerde session olsa gerek. Oluşturduğumuz Bitmap nesnesine çizim yapmak için DrawString ve DrawLine method’larını kullanıyoruz.Daha sonra yazının zor okunması için ki capctha yapmaktaki asıl amacımızda buydu resmi biraz daha karmaşıklaştırıyoruz ve üzerine rastgele siyah noktalar çiziyoruz Bitmap nesnemizin Width ve Height ‘lari içinde gezmemizin sebebide bu o an oluşan rastgele sayı 1 ‘e eşitse o piksel’e siyah nokta çizdiriyoruz.Daha sonra Bitmap nesnemizin Save method ‘unu kullanıyoruz.Capctha sayfamız hazır artık Default.aspx sayfamızdaki Giriş buton’unun altındaki kodları yazabiliriz.

 

 

 

 

İlk olarak session ‘da tuttuğumuz random string değişkenimizi capRand değişkenimize alıyoruz daha sonra kullanıcının girdiği değerleri bizim istediğimiz değerler ile karşılaştırıyoruz tabiki ben burada veri tabanı kullanmadığım için kullanıcı adı ve şifreyi elle girdim.Eğer kullanıcı tüm değerleri doğru girdi ise AnaSayfa.aspx sayfasına yönlendiriyoruz eğer herhangi bir bilgiyi yanlış girerse lblHata label’inin visible özelliğini true yapıyoruz ve ekranda gözükür olamasını sağlıyoruz.Bu şekilde ayarlamalarımızı yaptıktan sonra Default.aspx sayfamızı çalıştıralım ve sonuca bakalım.

 

 

 

 

 

 

Sayfamızı çalıştırıp bilgileri girdim sadece ekranda gözüken resimdeki 1 harfi yanlış yazdım ,  yanlış olduğunu anladı ve Tekrar Deneyiniz yazısı aktif oldu 2. resimdeki resmin değişik olması bir kere buton’a basınca sayfa’nın postback olmasıdır.Şimdi doğru verileri girelim ve sonuca bakalım

 

 

 

 

 

 

Kullanıcı Adı , Şifre ve güvenlik resmimizdeki değeri doğru yazdığımız zaman AnaSayfa.aspx sayfasına yönlendirildik.Güvenlik resmimiz şu an için başarılı gözüküyor herhangi bir bot’un okuması çok zor ama siz daha da karmaşık bir yapı isterseniz RetCap.aspx sayfasındaki Font ve Color değerleri ile oynayarak bunu sağlayabilirsiniz.İyi çalışmalar.

 

 

 

Kaynak Kodları Buradan İndirebilirsiniz

 

 

 

posted in ASP.NET by gokhan

Follow comments via the RSS Feed | Yorum yapın | Trackback URL

Leave Your Comment

*

 
Powered by Wordpress and MySQL. Theme by Shlomi Noach, openark.org