Web projelerimizin hemen hepsinde bir login mekanizması kullanmaktayız. Ayrıca şifremi unuttum kısmı gibi ya da iletişim formu gibi birçok noktadan web sitemizden kullanıcıdan aldığımız bilgileri sunucuya post ediyoruz. Post etmeden önce belirli işlemlerden ve kontrollerden sonra veriyi alıyor, gerekli işlemleri yapıyor(mesela iletişimden gelen form alanlarını veritabanına kaydettiğimizi varsayalım) ya da bilgileri kontrol edip kullanıcın geçerli bir kullanıcı olduğuna karar verip login olmasını sağlıyoruz.

Buraya kadar normal bir süreç işlemektedir. Ancak iyi niyetli olmayan durumlarla karşılaşmamız normal. Bunlardan birisi ise bruteforce(kaba kuvvet) saldırılarıdır. Tüm olasılıklar denenerek sisteme dahil olma hedeflenir. Saldırganın işlemci gücü yüksek ya da bazı önlemler aldığını varsayalım (bir yerden kurumun mail adreslerini ya da kullanıcı adları buldu). Bu durumda biz eğer sadece kullanıcı bilgisinin doğruluğunu kontrol edip sisteme dahil ediyorsak bu saldırgan büyük ihtimal belirli bir denemeden sonra, belirli kullanıcılar için login olabilir. Böylece kullanıcılarınız bilgileri saldırganın eline geçmiş olur. Artık bu bilgi ile neler yapacağı saldırgana kalmış. Bu noktada Google’ın satın aldığı reCAPTCHA hizmeti sayesinde ekstra bir güvenlik önlemi alabiliriz. reCAPTCHA’ nın fazla detayına girmeden v2' de, belirli bir deneme ya da durumdan sonra bir kullanıcı etkileşimi ile bot isteklerinin önüne geçmeyi hedeflenir.

reCAPTCHA v3 de ise kullanıcıdan herhangi bir etkileşim beklenmeden reCAPTCHA işlemi yapılır.

reCAPTCHA v3 versiyonunu web uygulamamıza dahil ettikten sonra Google APIbize 0 ile 1 arasında bir skor döner. 0 ve 0’ a yakın değerlerin bot, 1’e yakın değerlerin ise gerçek bir kullanıcı olduğunu belirtir. API’den bize dönen bu JSON cevabı (response) ile gerekli düzelmeyi yapabiliriz. Örneğin 0.5 değerinden küçük bir skor dönüyorsa form submit işlemini durdurup bir error page’e yönlendirebiliriz.

Yukarıdaki bilgilerden sonra örnek bir asp.net core mvc uygulamasında nasıl kullanıldığını anlatmaya çalışacağım.

Alt Text

İlk olarak Google reCAPTCHA servisini dahil edebilmemiz için Google hesabımız ile giriş yapıp web sitemizi kaydedip, gerekli key değerlerini alıyoruz. Birden fazla domain ekleyebiliyoruz. Eğer multi-tenant web uygulamamız varsa bu domainleri tek tek buraya eklememiz gerekir.

Bu işlemlerden sonra Google dokümantasyonunda istemci taraflı ve sunucu taraflı entegrasyonunun nasıl yapılacağı gösterilmiş.

Örnek uygulamada layout.cshtml dosyasında head tag’inin kapanmadan hemen üst satırında aldığımız site key değeri ile bir script tanımlaması yaptık. HomeController’ da bulunan TokenVerify methodunda ise JSON objesini oluşturduğumuz TokenResponseModel’e deserialize edip success olmayan ya da score’u 0.5’ten küçük ise false değeri diğer durumlarda true değeri dönüyor.

Javascript tarafında dönen değer false ise form submiti durduruluyor ve hata sayfasına yönlendiriliyor. Dönen değer true ise submit işlemi devam ediliyor ve girilen değerler doğru bir kullanıcı bilgisi ise sisteme login olunuyor.

Alt Text

Sonuç

Google reCAPTCHA v3 ile kullanıcıdan bir etkileşim beklemeden bot denemelerinin önüne geçmeye çalıştık.

Örnekte Google API’dan dönen skor için bir eşik değeri (0.5) belirleyip form işleminin tamamlanmasını sağladık.

Kaynaklar

https://www.google.com/recaptcha/about/

https://www.mehmetcakmaz.com.tr/google-recaptcha-v3-kullanimi/