Google reCAPTCHA v3 Nedir ve PHP - AJAX Formlarında Nasıl Kullanılır?

Teknik Ara 24, 2018

Merhaba dostlar,

Arayı biraz açtım farkındayım ama blogu yeni açmanın gazıyla içimde biriken bazı şeyleri bir anda hızlıca size aktarmak istediğimden çok hızlı yazılar eklemiştim ve bunun sonucunda aklıma gelen konu sayısının azalmasıyla arayı da biraz açmış olduk kusuruma bakmayınız. :)

Bugün sizlere yaşadığım bir sorunun çözümünü anlatacağım. Hali hazırda yayında olan bir web sayfam ve onun da en altında bir iletişim kutum var biliyorsunuz. Son zamanlarda site ziyaretçi sayımın da artmasıyla çok fazla gereksiz mail almaya başlamıştım. Yok "Logo tasarlıyoruz!," yok "Hosting hizmetimiz şöyle güzel!" falan fişmekan. Ben de bir ara uğraşıp yapamadığım reCAPTCHA olayını tekrardan bir ele alayım ve artık şu sorunu çözeyim diye uğraşıp sorunu çözdüm ve hemen taze taze sizinle paylaşmak istedim. :)

Ben sevgilime yazmam böyle uzun mail. :)
Bari işe yarasalar. :)

ReCAPTCHA nedir?

Aslında gönderilmek istenen verilerin gerçek kullanıcılardan geldiğini doğrulamaya yarayan bir sistem. İlk başta ekranda gördüğümüz metni kutuya yazarak yaptığımız bu işlem daha sonra resim seçme gibi çeşitli evrelerden geçmişti fakat yapay zeka teknolojilerinin hızla ilerlemesiyle artık bu işlemlerin hiçbirine gerek duymadan bot kontrolü yapan bir sistemimiz var elimizde. ReCAPTCHA v3. :)

Hadi başlayalım.


Yöntemimiz

Öncelikle Google reCAPTCHA'dan sitemize özel kodlar alacağız. Daha sonra HTML'imize dinamik olarak istemci tarafında çalışacak ve istemciye özel oluşturulacak bir tokeni PHP dosyamıza ulaştıracak bir JS kodu ekleyeceğiz. Bu tokeni de sanki formun bir elemanı gibi POST isteği yoluyla PHP dosyamıza ulaştıracağız. Daha sonra da PHP dosyamıza ekleyeceğimiz gizli anahtarımızla Google reCAPTCHA API'si ile bunu doğrulayıp ona göre mail gönderimi onaylayacağız. Manifestomuz oturduysa şimdi başlıyoruz. :)


1) Google reCAPTCHA Oluşturma

https://www.google.com/recaptcha/ sitesine gidiyoruz.

Buradan "My reCAPTCHA" kısmına gelip Google hesabımızla oturum açıyoruz.

Buraları gerektiği gibi doldurup hesabımızı oluşturuyoruz.

Şimdi karşımızda bu ıvır zıvırları da görüyorsak ayarlamalarımıza da başlayabiliriz. :)


2) HTML Düzenlemesi

Sitemizin yayın yaptığı HTML veya PHP neyse ona eklememiz gereken kısımlar olacak.

<script src='https://www.google.com/recaptcha/api.js?render=GOOGLE-RECAPTCHA-AÇIK-ANAHTARIMIZ(SİTE-KEY)'></script>

Önce hesabı oluşturduğumuzda bize verilen ıvır zıvırlardan "Client side integration" başlığının altındaki ilk kodu HTML'imizin HEAD'ine veriyoruz. İkinci kısmı BODY'inizin herhangi bir yerine verebilirsiniz.

<script>
grecaptcha.ready(function() {
grecaptcha.execute('GOOGLE-RECAPTCHA-AÇIK-ANAHTARIMIZ(SİTE-KEY)', {action: 'action_name'})
.then(function(token) {
// Verify the token on the server.
});
});
</script>

Şimdi burada gelen tokeni birazdan formumuza eleman olarak tanımlayacağımız id'ye atmamız gerekiyor.

...
var recaptchaCevabi = document.getElementById('recaptchaCevabi');
recaptchaCevabi.value = token;
...

Şimdi de formumuza bu elemanı ekleyelim.

<form>
...
<input type="hidden" name="recaptcha_Cevap" id="recaptchaCevabi">
...
</form>

Bu tarafta işlem tamam, şimdi PHP düzenlememize geçebiliriz.


3) PHP Düzenlemeleri

Gizli kodumuzu "$recaptcha_secret" kısmına yazıp işaretlediğim yere de kendi mail konfigürasyonlarımızı yapabiliriz.

<?php
 
    if ($_SERVER["REQUEST_METHOD"] == "POST") {


        $recaptcha_url = 'https://www.google.com/recaptcha/api/siteverify';
        $recaptcha_secret = 'GOOGLE-RECAPTCHA-GİZLİ-KODUMUZ';
        $recaptcha_response = $_POST['recaptcha_Cevap'];

        // Make and decode POST request:
        $recaptcha = file_get_contents($recaptcha_url . '?secret=' . $recaptcha_secret . '&response=' . $recaptcha_response);
        $recaptcha = json_decode($recaptcha);

        // Take action based on the score returned:
        if ($recaptcha->score >= 0.5) {
            // MAİL GÖNDERİMİNİ YAPACAĞIMIZ KISIM

        } else {
            // HATA MESAJLARINI BURADA YAZABİLİRİZ.

        echo "[Doğrulama Hatası] Bir hata oluştu. Tekrar deneyin, yine olmazsa iletisim@baykatre.com adresine bildirirseniz sevinirim.";
        }


?>

Şimdi her iki dosyayı da kaydedip sunucumuza yükleyip sonuca bakıyoruz.


Sonuç


Evet dostlar, bugün sizlere sitelerimize koyduğumuz formlara kullanıcılara ek yük yüklemeden nasıl bot kontrolü yapacağınızı ve saçma sapan bot tacizlerinden nasıl kurtulacağınızı anlatmaya çalıştım. Yazıyı aşağıdaki emojilerle oylamayı ve kafanıza takılan yerleri yorum kısmında benimle paylaşmayı unutmayım. Herkese iyi çalışmalar. :)

Anıl

Java Developer | @Turkcell

Great! You've successfully subscribed.
Great! Next, complete checkout for full access.
Welcome back! You've successfully signed in.
Success! Your account is fully activated, you now have access to all content.