ASP.Net ile Google ReCaptcha Kullanımı

google recaptchaMerhbaba arkadaşlar bu makalede ASP.Net uygulamalarımızda olmazsa olmaz olan güvenlik konusunda işinize yarayacak faydalı bir eklentiden bahsedeceğim. Herkese açık yani herhangi bir oturum bilgisi (Session) gerektirmeyen sayfalarda gerekli önlemler alınmadığı taktirde kötü niyetli kişiler ve yazılımlar tarafından sömürülme hatta yayının kesilmesi gibi durumlar meydana gelebilir özellikle belli kriterlere göre sorgulama, listeleme yaptırdığınız sayfaları kendi sistemleri için veri kaynağı haline getirmek isteyen yazılımlar olabilir. Arama motorlarının Crawler’ları da bir nevi aynı işlemi yaparlar ancak onlar bu işlem sırasında olabildiğince hassas davranırlar yani sisteminizin çökmemesi, zarar görmemesi için belli aralıklarda belli sayıda talep gönderirler. Hal böyle iken elbette geliştiriciler tarafından uzun yıllar önce bunun da bir çözümü bulunmuştur. Sizin de mutlaka karşılaşmış olduğunuz Captcha (Türkçe karşılığı “Doğrulama kodu” olarak geçiyor) denilen bir güvenlik protokolü ile sayfanıza gelen talebin gerçek bir insandan mı yok otomatik bir bottan mı geldiği anlaşılmaya çalışılır bunun için ise genelde çok basit bir yöntem kullanılır; Karışık ve yazılımlar tarafından OCR (Optical Character Recognition, Optik karakter Tanılama) yöntemiyle çözülmesi zor harf ve rakamlardan oluşan bir resim gösterilir ve bir metin kutusu içine bunları girmesi istenir.

recaphaDaha çeşitli yöntemler de mevcuttur. Örneğin; matematik işlemi sorup sonucunu girmesini istemek gibi. Bu yöntem yukarıda bahsettiğimden bir adımın bir adım daha zorlaştırılmış halidir zira bot bir şekilde metni okumuş olsa bile bir de matematik işlemi yapması gerekecektir. Bir diğer daha ileri yöntem ise metin değil de bir kaç adet resim gösterilip içerisinde belirli nesneleri barındıranların işaretlenmesi gibi. Mesela 9 adet resim arasından ağaç içeren resimlerin seçilmesi. Bu yöntemin de daha ileri seviyesi ve bu makalenin konusunu teşkil eden yöntem ise Google‘ın geliştirmiş olduğu ReCaptcha uygulamasıdır. Bu uygulama elbette sadece Google gibi firmalar tarafından geliştirilebilir çünkü sizin o siteye girmeden önceki davranışlarınızı (fare hareketleri, tıklama aralık ve sayıları, metin girişleri vb.) izleyerek ve tüm bu verileri ufak bir yapay zeka uygulaması ile harmanlayarak gerçek bir kişi mi yoksa bir bot mu olduğunuzu anlamaya çalışır ve eğer bu işlem sonucunda kesin bir sonuca varamazsa ya da kendi vardığı sonuca güvenmezse son çare olarak yukarıda bahsettiğim farklı resimler arasından seçim yapmanızı ister böylelikle güvenlik hep en üst düzey tutulmuş olur.

 

İşlemlere başlamadan önce Google ReCaptcha hizmeti için özel API Key almalısınız. Google oturum açtıktan sonra https://www.google.com/recaptcha adresine girin “Get ReCaptcha” linkine tıklayın. Domains alanına eklentiyi kullanacağınız site ismini yazın. localhost’ta çalışacaksanız “localhost” yazmalısınız “Register” butonuna basın. açılan sayfadaki “Site key” ve “Secret Key” değerlerini bir yere not edin.

 

Şimdi kullanımına geçelim. mantık aslında basittir ve protokol şöyle işler; kullanıcı ReCaptcha widget (bileşen)’ın üzerindeki “Ben robot değilim” yazısına tıklar ve değerlendirme işlemi başlar işlem bittiğinde ReCaptcha nesnesi geriye bir Response Key döndürür. bu key size özel değerlendirme sonucuna ulaşacağınız anahtardır. bu key post, ajax vb. yöntemle Code Behind tarafına gönderilir oradan da Google Api servisine gönderilir ve servis de geriye sonucu döndürür. aşağıda bir örnek paylaştım.

Google ReCaptcha JS dosyası

<script src="https://www.google.com/recaptcha/api.js" async defer></script>

Widget Yapısı. Sayfanız içerisinde herhangi bir yerde kullanabilirsiniz.

<div class="g-recaptcha" data-callback="verifyCallback" data-sitekey="SITE_KEY"></div>

data-callback parametresi doğrulama işlemini tamamladıktan sonra çağırılacak javascript fonksiyonunu alır. data-sitekey api key değerinizi alır. Mobilde kullanıyorsanı Widget’ın küçülmesini isteyebilirsiniz. aşağıdaki gibi kullanarak boyutunu değiştirebilirsiniz

<div class="g-recaptcha" style="transform:scale(0.77);-webkit-transform:scale(0.92);transform-origin:0 0;-webkit-transform-origin:0 0;" data-callback="verifyCallback" data-sitekey="SITE_KEY"></div>

C# ile Sorgulama

/* include edilecek kütüphaneler
Using System.Net;
Using System.Web.Script.Serialization;
*/
protected void Page_Load(object sender, EventArgs e)
{
   bool gercekkisimi = CaptchaValidate();
}

private bool CaptchaValidate()
{
   WebClient wc = new WebClient();
   string result = wc.DownloadString("https://www.google.com/recaptcha/api/siteverify?secret=SECRET_KEY&response=" + Request.Form["g-recaptcha-response"] + "&remoteip=CLIENT_IP");
   dynamic json = new JavaScriptSerializer().DeserializeObject(result);
   return json["success"];
}

Mustafa Tayyip YETİŞ
Yazılım Geliştirme Uzmanı

0.0 Ort. (0% puan) - 0 oy

Bir Cevap Yazın

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