![CAPTCHA Google yeni RECAPTCHA uygulamasi [php] 3](https://makaleci.com/wp-content/uploads/2015/02/CAPTCHA-696x428.png)
Dunyada binlerce sitede kullanilan guvenlik uygulamasinin yeni versiyonu eskisine nazaran cok yenilikci bir yonuyle hayatimiza giris yapti. Ozellikle kotu niyetli botlara ve yazilimlara karsi kendisini cok gelistiren bu uygulama, devamli ve gercek ziyaretcilerin guvenlik uygulamasindan kolayca gecmesini sagliyor. Elde ettigi verilere dayanarak kullanici analizi yaparak kimin bot, kimin gercek kullanici oldugunu biliyor ve ona gore guvenlik sorusu cikariyor, yada izin veriyor.
Uygulamayi php ile hazirlayalim, ilerleyen donemlerde herkesin kullanacagina eminim. Hatda suanda bir cok buyuk web sitesinde gormeye baslamissinizdir. Bunlarin arasinda Snapchat, WordPress, Humble Bundle gibi dunya buyukleride yer aliyor. O zaman bizde kullanalim :)
Download – Demo
1. Adim
Oncelikle Google RECAPTCHA sayfasindan sitemizi ekleyerek site key ve site secret kodlarimizi olusturuyoruz. Ornek resim asagida:
Sonrasinda site key ve site secret kodlarini goreceksiniz. Site Key kismindaki ID bizim RECAPTCHA formumuzun gorunmesini saglayacak olan html etiketinde kullanacagimiz anahtar olacak. Ornek asagidaki gibi bir sekilde RECAPTCHA miz gorunur olacak:
<div class="g-recaptcha" data-sitekey="Site_key_kodunuzu_buraya_yazin"></div>
Ancak bundan onceye RECAPTCHA’miniz calisabilmesi icin gerekli olan javascript dosyamizi sayfamiza cagiralim. Asagidaki kod sayfanin ust taraflarinda olursa daha iyi olacaktir:
<script src='https://www.google.com/recaptcha/api.js'></script>
Buraya kadar yaptiysaniz RECAPTCHA dogrulama ekranimiz sitemizde yada formumuzda gorunmeye baslayacaktir. Bu ilk adimdi, ikinci adim php tarafinda olacak.
2. Adim
Asagidaki php kodlarini dosyanizin en ustune ekleyin:
<?php /* Kuaza.com/ Kuaza */ // Site key kodunuzu buraya yazin $key='site_key_kodunuzu_buraya_yazin'; // Site secret kodunuzu buraya yazin $secret='site_secret_kodunuzu_buraya_yazin'; $msg=''; if($_SERVER["REQUEST_METHOD"] == "POST") { $recaptcha=$_POST['g-recaptcha-response']; if(!empty($recaptcha)) { // curl fonksiyonumuz.. function getCurlData($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_TIMEOUT, 10); curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16"); $curlData = curl_exec($curl); curl_close($curl); return $curlData; } $google_url="https://www.google.com/recaptcha/api/siteverify"; // cloudflare kullanan sitelerde, kullanicinin gercek IPsini alma // https://makaleci.com/karsilastigim-hatalar/cloudflare-kullananlar-icin-gercek-ip-alma $ip=$_SERVER['REMOTE_ADDR']; $url=$google_url."?secret=".$secret."&response=".$recaptcha."&remoteip=".$ip; $res=getCurlData($url); $res= json_decode($res, true); // dogrulama kodu dogru ise if($res['success']) { $msg='<div class="alert alert-success" role="alert">Dogrulamayi basariyla gectiniz</div>'; // dogrulama kodu yanlis ise }else{ $msg='<div class="alert alert-danger" role="alert">Lutfen reCAPTCHA \'yi tekrar girin.</div>'; } // dogrulama kodunu bos gondermisse }else{ $msg='<div class="alert alert-danger" role="alert">Lutfen reCAPTCHA \'yi bos gecmeyiniz.</div>'; } } ?>
Bu islemden sonra HTML arayuzumuzu yani form kismini hazirlayalim. asagidaki kodlari formunuzda bir yere ekleyin:
<div class="g-recaptcha" data-sitekey="<?php echo $key; ?>"></div>
Ben php kisminda gerekli olan degiskenler icin bolum ayirdim, gerekli parametrelerinizi oraya girin, HTML kisminda form alanina ekleyeceginiz kodlarda bu degiskenler tanimli olacak, ancak siz isterseniz bu alani kendinize gore duzenleyebilir yada degistirebilirsiniz.
HTML tarafinda kullanacagimiz kodu form etiketleri arasinda kullanamaniz daha saglikli olacaktir.
Simdide sira hata yada basari durumunda ekrana yazdiracagimiz kodlarimizi eklemede. Asagidaki kodlari bilgi mesajlarini nerde gostermek istiyorsaniz oraya ekleyin:
<div class='clearfix'><?php echo $msg; ?></div>
Bu islemlerden sonra guvenlik kodu uygulamamiz basarili sekilde kullanima acilmis olacaktir. Basit ve butun anlatimi icerisinde barindiran kodlarimizin tamamini asagida paylasiyorum. Gerekli olan site key ve secret alanlarini kendi domain (site adresiniz)’e gore duzenledikten sonra kullanmaya baslayabilirsiniz.
Ornek kodlarin tamami
<?php /* Kuaza.com/ Kuaza */ // Site key kodunuzu buraya yazin $key='site_key_kodunuzu_buraya_yazin'; // Site secret kodunuzu buraya yazin $secret='site_secret_kodunuzu_buraya_yazin'; $msg=''; if($_SERVER["REQUEST_METHOD"] == "POST") { $recaptcha=$_POST['g-recaptcha-response']; if(!empty($recaptcha)) { // curl fonksiyonumuz.. function getCurlData($url) { $curl = curl_init(); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_TIMEOUT, 10); curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16"); $curlData = curl_exec($curl); curl_close($curl); return $curlData; } $google_url="https://www.google.com/recaptcha/api/siteverify"; // cloudflare kullanan sitelerde, kullanicinin gercek IPsini alma // https://makaleci.com/karsilastigim-hatalar/cloudflare-kullananlar-icin-gercek-ip-alma $ip=$_SERVER['REMOTE_ADDR']; $url=$google_url."?secret=".$secret."&response=".$recaptcha."&remoteip=".$ip; $res=getCurlData($url); $res= json_decode($res, true); // dogrulama kodu dogru ise if($res['success']) { $msg='<div class="alert alert-success" role="alert">Dogrulamayi basariyla gectiniz</div>'; // dogrulama kodu yanlis ise }else{ $msg='<div class="alert alert-danger" role="alert">Lutfen reCAPTCHA \'yi tekrar girin.</div>'; } // dogrulama kodunu bos gondermisse }else{ $msg='<div class="alert alert-danger" role="alert">Lutfen reCAPTCHA \'yi bos gecmeyiniz.</div>'; } } ?> <!DOCTYPE html> <html lang="en"> <head> <script src='https://www.google.com/recaptcha/api.js'></script> </head> <body> <div class="clearfix"> <div class='clearfix'><?php echo $msg; ?></div> <form class="" action="" method="post"> <div class=""> <div class="g-recaptcha" data-sitekey="<?php echo $key; ?>"></div> <button type="submit" class="" style="padding:25px;">Gonder</button> </div> </form> </div> </body> </html>
Bu anlatimim buraya kadar, anlamadiginiz yerler olursa transa gecin, ben sizi bulurum :)
Hocam çok güzel anlatım olmuş teşekkür ederim fakat bir sorun yaşıyorum. Form içerisine action ile smtp sayfasına yönlendirme yaptığımda Ben robot değilim butonuna tık koymasam bile devam ediyor. Smtp kodlarını sayfanın alt kısmına çekip action tamamen kaldırdım bu defa da sürekli olarak reCAPTCHA’yı tekrar girin uyarısı veriyor. Nerde hata yapıyor olabilirim ?
Konuda yer alan php kodlarini smtp sayfasinin en ustune ekleyin ve o sekilde kontrol edin. Php kodlarinin icerisinde kontrol bolumleri var, hatali yada dogru oldugu durumlarda yapilacak islemleri orda yonlendirebilirsiniz.
Smtp kodlarını tamamen birleştirip recaptcha php kodlarının içine koydum ama durum yine aynı hocam.
Kodlarinizi burda paylasin yada burdan bana iletin bi kontrol edeyim: https://kuaza.com/iletisim
Form icinde guvenlik kodunu gostermek istediginiz yere asagidaki kodlari ekleyin:
Google den aldiginiz key’ide kod icerisindeki bu alana girin: Site_key_kodunuzu_buraya_yazin
sonrasinda mailgonder.php dosyasinin icerisinede asagidaki php kodlarini ekleyin: kodun ustundeki key ve secret kod kisimlarini kendinize gore duzenlemeyi unutmayin.
Bu kadar, kod da da goreceginiz gibi guvenlik kodu dogru ise // dogrulama kodu dogru ise kismi acilacaktir, degil ise alt daki alan acilacaktir. Bu alanlara yapilacak islemi iceren php kodlarinizi ekleyebilirsiniz.