Kategori:

Php

Başlık:

Php sitenize Google Recaptcha v3 entegre etme

Sitenizi ziyaret eden zararlı botlar veritabanınıza zarar verebilirler veya şişirebilirler. Sizin için zaman ve veri kaybına neden olabilirler. Google Recaptcha v3 sizi bu dertten büyük ölçüde kurtarıyor. Üstelik bunu yaparken kullanıcılar için can sıkıcı olabilen boşluk doldurma, karakter veya resim okuma gibi durumlar Google Recaptcha v3 ile büyük oranda ortadan kaldırılmış durumda. Google  Recaptcha v3'ün çalışma mantığı kabaca sitenizi ziyaret eden kullanıcılara verdiği puanlama sistemine dayanıyor. 0 ve 1 arasında değişen puan skalasında 0'a doğru kullanıcının bot olma ihtimalli yüksek iken 1'e doğru alınan puanlar kullanıcının gerçek bir kullanıcı olma ihtimalinin yüksek olduğunu gösteriyor. Siz de sistemi sitenize entegre ettiğinizde botların vereceği zararlardan büyük ölçüde kurtulmuş oluyorsunuz. Sistemi kabaca anlattığımıza göre şimdi gelelim PHP temelli bir siteye bu sistemin entegre edilmesine:

Öncelikle aşağıdaki bağlantıdan Google Recaptcha sitesine girip e-postanızla girişinizi yapıyorsunuz:

https://www.google.com/recaptcha/intro/v3.html

Siteniz için kaydınızı aşağıdaki formdaki gibi yapın.

Kaydınızı yaptıktan sonra Google siteniz için aşağıdaki gibi 2 tane anahtar tanımlayacak:

Bu anahtarlardan ikisi de aşağıdaki örnekteki gibi kullanılacak. 

Şimdi gelelim aldığımız kodları PHP tabanlı sitemizde kullanmaya. Öncelikle html sayfasının head tagları arasına aşağıdaki gibi scripti ekleyin: 

Burada "reCAPTCHA_site_key" kısmına site anahtarını yapıştırıyoruz. Daha sonra aşağıdaki örnekteki gibi formu oluşturacağımız sayfaya javascript kodunu ekleyin:

  
 
//buradaki id aşağıdaki javascript kodunda,name ekle.php dosyasında kullanılacak

Yine burada "reCAPTCHA_site_key" kısmına Google'ın vermiş olduğu site anahtarını ekleyin. Şimdi gelelim işin Php kısmına. Formun action kısmında belirtilen "ekle.php" dosyası aşağıdaki gibi olacaktır: 

success == true && $botcontrol->score > 0.5){

                    $ad= $_POST['isim'];
                    $soyad= $_POST['soyad'];
        
                    try {

                        $baglanti = new PDO("mysql:host=localhost;dbname=db_adi;charset=utf8", "kullanici_adi", "sifre");
                        $baglanti->exec("SET NAMES utf8");
                        $baglanti->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                        $sorgu = $baglanti->prepare("INSERT INTO kisiler(adi, soyadi) VALUES(?, ?)");
                        $sorgu->bindParam(1, $ad, PDO::PARAM_STR);
                        $sorgu->bindParam(2, $soyad, PDO::PARAM_STR);
                        $sorgu->execute();
                        echo "Bilgiler başarılı bir şekilde kaydedildi.";

                        } 
                    catch (PDOException $e) {
                        die($e->getMessage());
                        }
        
                    } 
                else { 
                    echo "Sen bir robotsun!!!!!";   
                     }
        
         }
?>

  • Yukarıdaki kodda "reCAPTCHA_secret_key"kısmına Google tarafından verilen gizli anahtar yazılacaktır. Eğer hazırladığımız form doldurulup "Gönder" butou tıklanırsa bu script çalışacaktır.
  • Bir önceki formdan gelen reCaptcha değeri getCaptcha fonsiyonuyla işlenecek ve sonucunda bi json nesnesi döndürecektir.Json nesnesi için burada, birçok sitede kullanılan "file_get_contents" fonksiyonu yerine "curl_get_file_contents" fonksiyonunu tanımlayıp kullandık çünkü bazı sunucularda "file_get_contents" fonksiyonunun güvenlik açıkları oluşturulması nedeniyle çalışması engellenmektedir. Fakat yukarıdaki örnekteki gibi "curl_get_file_contents" fonksiyonu tanımlandığında bu sorun aşılmaktadır.
  • Burada veritabanı işleminde mysli yerine kullanılan PDO metodu daha güncel bir arayüzdür. Bu arayüzü kullanarak "Sql injection" tipi saldırıların önüne geçilmektedir.
266 views
YORUMLAR