PHP Dersleri

Google reCaptcha Güvenlik Doğrulaması (Ben Robot Değilim)

Formdan gelecek olan değerlerin, spam nitelikli verilerin olmasını istemeyiz. Bundan dolayı bir güvenlik doğrulaması formu oluşturmalıyız. Güvenlik doğrulaması olarak; sayıların toplamı ve yazılışı gibi bir takım sorulara cevap verilmesi isteyebiliriz. Bunun yanı sıra resimde yer alan harfleri yazınız gibi uygulamalarda yapabiliriz. Bu yapılan işlemler spam mesajları engelleyecek nitelikte olacaktır.

Spam mesajlardan kurtulmak için bir diğer yöntem ise, Google tarafından geliştirilen reCaptcha uygulamasını kullanmaktır. Bu uygulama hem kolay kurulmakta, hem de diğer klasik yöntemlere göre şık görünmektedir. Kendi sitemde de kullanmış olduğum bu güvenlik doğrulamasının nasıl yapıldığını sizlere anlatmaya çalışacağım.

Güvenlik uygulamasını kullanmak için öncelikle, Google reCaptcha sitesini oturum açarak ziyaret etmemiz gerekiyor. Siteye girdikten sonra, Get reCAPTCHA butonuna tıklatıyoruz. Burada bizi Register a new site(Yeni Site Kayıt) formu karşılıyor olacak. Buraya reCaptcha uygulamasını nerede kullanacaksan ona göre bilgileri giriyoruz. İlk değere, hangi sitede kullanmış olduğunuzu anlayacağınız bir bilgi mesajı giriyorsunuz. Örneğin; ibrahim ÇEVRÜK gibi. İkinci değere ise, kullanmak istediğiniz web sitesini yazıyorsunuz. Örneğin; ibrahimcevruk.com gibi. Form bilgilerini girdikten sonra Register diyerek kayıt işlemini tamamlıyoruz.

Kayıt işlemi bittikten sonra bizi bir sayfaya yönlendirecektir. Yönlendirmiş olduğu bu sayfa, reCaptcha’in kurulum bilgilerini içermektedir. reCaptcha kullanabilmek için, Site key ve Secret key değerlerine ihtiyacımız vardır. Bu bilgiler yönlendirilmiş olduğumuz sayfada yer almaktadır.

reCaptcha Kurulumu Nasıl Gerçekleştirilmektedir?

Step 1: client-side integration bölümden yer alan talimatları uyguluyoruz.

HTML bölümünde etiketinin hemen üstüne aşağıdaki kodu yazınız.

https://www.google.com/recaptcha/api.js

Form etiketinin içerisinde reCaptcha değerinin çıkmasını istediğiniz bölüme aşağıdaki kodu yazınız. Yalnız dikkat etmeniz gereken bir nokta bulunuyor. Bu kodda yer alan data-sitekey=”” değeri, Site key ile aynı olmalıdır.

<div class="g-recaptcha" data-sitekey="BU BÖLÜME SİTE KEY DEĞERİNİ GİRİNİZ"></div>

HTML bilgileriyle işlemlerimiz bu kadardır. Şimdi ise buradan gelecek olan bilgileri alarak PHP ile olan işlemlere geçelim.

Step 2: Server side integration bölümünde ise, reCaptcha ‘den gelen doğrulama bilgisini nasıl kontrol edeceğimiz hakkında bir takım bilgiler verilmektedir. Burada yer alan 3 bilgi ile bir link yapısı oluşturmak ve sonrasında o link değerine bağlanıp, dönecek olan sonucu almamız gerekiyor.

Bilgileri alabilmek için oluşturulması gerekilen link yapısı şöyle olmalıdır;

https://www.google.com/recaptcha/api/siteverify?secret=your_secret&response=response_string&remoteip=user_ip_address

Yukarıda yer alan bilgiler şu şekilde tanımlanmış;

Secret değerine, Secret Key değeri girilmelidir. Bu anahtar kodu sayfanın en üstünde yer almaktadır.
Response değerine, reCaptcha ‘den gelen değer yazılmaktadır. Bu bilgi kullanılan yönteme göre g-recaptcha-response name adıyla alınmaktadır. Örneğin: $_POST[“g-recaptcha-response”];
Remoteip değerine de, kullanıcının ip adresini yazmalıyız. Böylelikle spam olan kişilerin ip adresini de algılamış olacağız.

PHP Bölümünde Yapılacak Olan Kodlamalar Nelerdir?

PHP bölümünde, ilk olarak formdan gelecek olan değeri alacağız. Daha sonra bu bilgiyi de kullanarak Link yapısını oluşturacağız. Link yapısını oluşturduktan sonra, bu link değerine cURL ile bağlanıp, gelecek olan sonuç çıktısını alarak işleme son vereceğiz.

Pekiştirmek ve tam olarak anlamak için basit bir şekilde örnek üzerinden ilerleyelim.

<html>
<head>
   <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
   <title>Google reCaptcha Güvenlik Uygulaması</title>
   <img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" data-wp-preserve="%3Cscript%20src%3D%22https%3A%2F%2Fwww.google.com%2Frecaptcha%2Fapi.js%22%3E%3C%2Fscript%3E" data-mce-resize="false" data-mce-placeholder="1" class="mce-object" width="20" height="20" alt="<script>" title="<script>" />
</head>
<body>
<form action="" method="POST">
<div>Kullanıcı Adı</div>
 
        <input type="text" name="kullanici" />
<div>Güvenlik doğrulamasını yapınız</div>
<div class="g-recaptcha" data-sitekey="SİTE KEY KODUNU BURAYA YAZINIZ"></div>
 
        <button>Doğrulama Yap!</button>
    </form>
 
</body>
</html>

Şimdi de PHP bölümüne geçerek asıl işlemlerin yapıldığı kod bloğunu görelim.

Function Baglan($a){
   $ch    = curl_init();
   curl_setopt($ch, CURLOPT_URL, $a);
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
   curl_setopt($ch, CURLOPT_HEADER, false);
   curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
   $isle = curl_exec($ch);
   curl_close($ch);
   return $isle;
}

Bağlantı fonksiyonunu oluşturduğumuza göre diğer işlemlere geçebiliriz. Öncelikle formdan gelen değeri almakla başlıyoruz.

$reCaptcha   = $_POST["g-recaptcha-response"];
$Sec   = "SİTE KEY KODUNU BURAYA YAZINIZ";
$ip   = $_SERVER['REMOTE_ADDR'];
$LinkYapisi = "https://www.google.com/recaptcha/api/siteverify?secret=".$Sec."&response=".$reCaptcha."&remoteip=".$ip;

2. Adımda istemiş olduğu bilgileri bu şekilde oluşturmuş olduk. Şimdi ise doğrulama işlemini gerçekleştirmek için hazırlamış olduğumuz $LinkYapisi değişkenini, Baglan fonksiyonuna iletiyoruz. Böylelikle oluşturduğumuz linke bağlanmış oluyoruz.

$Baglan   = Baglan($LinkYapisi);

Link değerine bağlandıktan sonra $Baglan değişkenini, print_r ile ekrana basarak çıkacak olan sonuçları görebiliriz. Tabi burada çıkacak olan değerler json formatında geldiği için, ilk olarak decode işlemini gerçekleştirelim. Bunu ister $Baglan değişkeninde tanımlayabilir, isterseniz de ayrı bir değişkende tanımlayabilirsiniz.

$Kontrol = json_decode($Baglan);

Json decode tanımlamasını yaptıktan sonra, formdan gelecek olan değeri görmek için, print_r ile $Kontrol değişkenini ekrana bastıralım.

{
  "success": true|false,
  "error-codes": [...]   // optional
}

İşlem sonrasında çıktı olarak yukarıdaki değerler gelecektir. Burada success parametresi, gönderilmiş olunan reCaptcha değerine göre bir içeriğe sahip olacaktır. reCaptcha doğru girilmiş ise true ya da 1, yanlış girilmiş ise false ya da 0 değeri dönecektir.

Kontrol sonrasında dönecek olan bilgileri de aldığımıza göre, sonuç doğrultusunda istediğimiz mesajı şu şekilde verebiliriz;

if( ($Kontrol->success) == "1"){
    echo "Güvenlik kodu doğrulaması başarılı :)";
}elsee{
    echo "Güvenlik kodunu YANLIŞ! Girdiniz :/ ";
}

Böylelikle Google reCaptcha ile güvenlik doğrulama işleminin nasıl yapıldığını görmüş olduk. Yazıda he ne kadar uzatmış olsam da olabildiğince basit bir şekilde göstermeye çalıştım.

Örnekte belirtmiş olduğum bilgiler sadece gösterme amaçlı olduğundan dolayı, kullanıcı adı ve diğer bilgileri kontrol ettirmeden direk olarak, güvenlik kodunun nasıl kontrol edileceğini gösterdim. Zaten var olan sisteminize ekleyeceğiniz için, diğer form bilgilerinin kontrolünü yapmak saçma olacaktır.

İlgili Makaleler

Bir cevap yazın

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