Fırat Esmer

ANLATILAN SENİN HİKAYENDİR - KARL MARX

ASP.NET İle reCAPTCHA Kullanımı

reCAPTCHAEğer bu makaleyi okumaya niyetliyseniz, birazdan güzel bir güvenlik önlemi olan CAPTCHA'yi (Completely Automated Public Turing Test To Tell Computers and Humans Apart, yani sizin insan mı yoksa bilgisayar mı olduğunuza karar veren mekanizmayı) ASP.NET ile kullanmayı öğreneceksiniz. Peki nedir bu CAPTCHA? CAPTCHA, bir resim üzerine işlenmiş metinin insan tarafından okunabilmesi için kolay ancak bilgisayar (bot diyelim) tarafından okunulabilmesi için zor sözcük üreten programdır. En az bir kere görmüşsünüzdür bu uygulamayı. Siteye üye olurken ya da yorum gönderirken sizden insan olup olmadığınızı anlayabilmeleri için soru sorarlar. Siz de cevap verirsiniz. Cevap doğruysa insansınızdır, yanlış ise bot muamelesi görürsünüz. İşte o yapı CAPTCHA'dir. Bu CAPTCHA'nin doğru resmi tıklatma, üzerinde rakamlar bulunan kutuları sıraya dizdirme gibi farklı varyasyonları da mevcut. Peki niye böyle bir şey yapıyorlar? Sebebi ise yorum eklenen bir sayfa düşünün, buraya botların girip 100'lerce gereksiz yorum yazdığını göz önüne alırsak hem görüntü hem de gereksiz veri açısından çok can sıkıcı bir durum olacaktır. Evet öyleyse başlayalım.
Senaryo : Bir adet textbox, bir adet button ve reCAPTCHA uygulaması ile post işlemi gerçekleştirmeye çalışacağız.
Bilinmesi Gerekenler :
  • Makaledeki örnek .NET Framework 3.5 ve Visual Studio 2010 ile hazırlandı,
  • reCAPTCHA uygulaması Google tarafından sunulan ücretsiz bir servis ancak Google hesabınız olması lazım.
İlk olarak reCAPTCHA uygulamasını indirmemiz için bir kaç basit adım gerekiyor.
İlk adımımız reCAPTCHA'nin sitesine girip "USE reCAPTCHA ON YOUR SITE" yazısı bulunan butona tıklıyoruz.
Use reCAPTCHA On Your Site
Daha sonra ise "Sign Up Now!" yazısı bulunan butona basıp Google hesabımız ile giriş yapıyoruz.
Sign Up Now
Google hesabımız ile giriş yaptıktan sonra karşımıza şöyle bir ekran çıkacak.
Create reCAPTCHA key
Burada domain yazan kısma internet sitenizin ismini yazarak "Create Key" butonuna bastığınızda sitenize özel iki adet key üretecektir. Bunlar private key ve public key'dir. Ekran görüntüsünde bulunan "Enable this key on all domains (global key)" opsiyonunu en sonunda anlatacağım.
Daha sonraki adımda domain ismine göre üretilecek şifreler aşağıdaki ekran görüntüsündeki gibi görünecektir.
reCAPTCHA Keys
Tüm işlemleri geçtik. Artık gerekli olan dökümanları indirip projemize dahil edeceğiz. Yukarıdaki ekran görüntüsünde bulunan "reCAPTCHA plugins and libraries" yazısına tıklayıp gerekli olan yerden de indirebilirsiniz ancak adım sayımızı biraz artıracağı için size direkt indirmeniz için indirme linkini veriyorum. (TIKLAYIN)
İndirdiğiniz sıkıştırılmış dosyayı açtığınızda karşınızda bir DLL dosyası göreceksiniz. Bu DLL dosyasını projenizde kullanabilmek için projenize sağ tıklayarak "Add Reference" demeniz gerekiyor.
reCAPTCHA DLL
Şimdi kod yazma işlemimiz başlıyor. Sayfanızın source kısmında üst tarafa aşağıdaki satırı ekleyin.
<%@ Register TagPrefix="recaptcha" Namespace="Recaptcha" Assembly="Recaptcha" %>
Burada reCAPTCHA kontrolünün sayfamızda kullanılacağını söylemiş oluyoruz. Daha sonra ise ;
<recaptcha:RecaptchaControl ID="recaptcha" runat="server" PublicKey="SİZE VERİLEN PUBLIC KEY’İ GİRİN" PrivateKey="SİZE VERİLEN PRIVATE KEY’İ GİRİN" />
satırını form tag'leri arasına eklediğinizde sayfamızın source tarafı ile işimiz bitiyor.
Şimdi kod yazma kısmına gelirsek yapacağımız işlem sayfamızdaki butona tıklandığında reCAPTCHA tarafından üretilen iki kelimenin doğru bir şekilde yazılıp yazılmadığını kontrol etmek ve çıkacak sonuca göre işlem yaptıracağız. Hepsi bu. Bu kodu da ekleyelim. 
protected void btn_Gonder_Click(object sender, EventArgs e)
    {
        // Sayfanın geçerli olup olmadığını kontrol ediyoruz.      
        if (Page.IsValid)
        {
            lbl_Sonuc.Text = "Doğru girdiniz!";
            lbl_Sonuc.ForeColor = Color.Green;
            return;
        }

        lbl_Sonuc.Text = "Yanlış girdiniz!";
        lbl_Sonuc.ForeColor = Color.Red;
    }
Gelelim  "Enable this key on all domains (global key)" olayına. Bu checkbox seçili ise size üretilecek olan private ve public key'ler tüm çapraz domainlerinizde geçerli olacak. Ancak seçili olmazsa, tek bir domain ve onun alt domain'lerinde geçerli olacak. Birden fazla site için key almak istiyorsanız reCAPTCHA'nin sitesinde sol taraftaki menüde bulunan "My Account" kısmına girerek birden fazla site için key alabilirsiniz. Bu arada reCAPTCHA ile ilgili söylemek istediğim son 2 şey var. Birincisi kontrolünüze uygulayabileceğiniz toplam 4 farklı tema bulunuyor. Bunları görmek için form tag'leri arasına yazdığınız recaptcha satırında Theme özelliğini kontrol edin. İkincisi, reCAPTCHA kontrolünüzde bulunan butonların üzerine gelindiğinde Türkçe açıklamalar bulunmasını istiyorsanız Language="tr" özelliğini ekleyin. Projemizde bulunan reCAPTCHA örneğinin en son ekran görüntüsü böyle olacaktır :
reCAPTCHA Demo Görüntüsü
Uygulamalı halini görmek için buraya tıklayın.
reCAPTCHA hakkında daha fazla bilgi almak için buraya tıklayın.

Yorumlar (8) -

  • Ercüment

    16.9.2011 18:42:20 | Yanıtla

    Merhaba hocam. Öncelikle anlatımınız çok başarılı olmuş, teşekkür ederim.
    Yanlız benim bir sorunum var captcha yı membership login kontrol' e eklemek istiyorum.
    Login butonun Code Bhind ına kodları eklıyorum kontrolu gerçekleştirmiyor.
    Aynı sorunla createuserwizart'tada karsılastım bunun ile ilgili ne yapabilirim ?  

    • Fırat Esmer

      18.9.2011 14:16:05 | Yanıtla

      Merhaba Ercüment, dediğin gibi reCAPTCHA'yi createuserwizard kontrolü ile denedim ve çalışmadı. Bayağı da vaktimi aldı. Ama sonunda DLL dosyasından kaynaklanan bir hata olduğunu öğrendim. Test etmedim ancak forumlarda konusu geçen  tartışmalara rastladım. Aşağıda vereceğim linkteki değişiklikleri DLL dosyası üzerinde yapıp dener misin? Validate kısmı gerçekten çok sıkıntılı. (:
      Link : http://goo.gl/OfM2d

  • Ercüment

    19.9.2011 20:21:10 | Yanıtla

    Hocam inceledimde sorunların devam edecegıne karar verdim. Smile
    Sonra kendı guvenlik resmi uygulamamı kodladım.
    Teşekkür ederim ilgilendiğiniz için.
    İyi çalışmalar.

  • ali

    11.7.2012 19:52:03 | Yanıtla

    çok teşekkürler

  • Doğan Yılmaz

    29.1.2013 11:04:29 | Yanıtla

    2 günlük araştırma sonucunda artık code bhind  da çalışıyor, ek olarak validationgroup ile bile kulanabildim .

    this.recaptcha.Validate();
    if (recaptcha.IsValid == true)
           {
            }

    kredibasvurusu.gen.tr/soru-sor/soru-sor.aspx

    • Fırat Esmer

      29.1.2013 11:31:29 | Yanıtla

      Merhaba Doğan,

      Teşekkür ederim bilgin için. Sormak istediğim; artık dediğin recaptcha.dll'de bir güncellenme mi söz konusu?

  • Saygın Çilli

    9.8.2017 14:04:24 | Yanıtla

    Merhaba hocam, bir projemizde login ekranı içinde captcha kulandık ama sayfa ilk açıldığın zaman gelen resim timeout oluyor hata alıyoruz resmi yenilemeden işleme devam edemiyoruz acaba böyle bir sorunla karşılaştınızmı.

    • Fırat Esmer

      9.8.2017 14:11:31 | Yanıtla

      Selam Saygın,
      Daha önce bahsettiğin şekilde sorunla karşılaşmadım, kod örneği gönderirsen incelerim.

Yorum ekle

Loading