Web projeleri için botlar en can sıkıcı noktalardan birisidir ve onlardan korunmak için bazı yöntemlere ihtiyaç duyarız. Güvenlik kodu bir başka adıyla CAPTCHA uygulamaları ise bu noktada en çok tercih edilen yöntemdir.
Form girdilerini işleme gönderirken kullandığımız güvenlik kodu (capthca) unsuru, gerçek kişileri bot dediğimiz ve çoğunlukla iyi niyetli olmayan örümceklerden ayırmak için kullanılan etkili bir çözümdür. “Peki nedir bu botların derdi? Ne alıp veremedikleri var bizimle?” derseniz, bot olgusunun altında genelde web sayfanıza/e-mail servisinize sahte isimlerle kaydolma, dayatmalı reklam yapma girişimi veye bir takım kodlar göndererek size/web sayfanıza zarar verme mantığı yatmaktadır.
Botlar web sayfasında bulunan yazılı metinleri (text) kolayca tarayıp elde ettikleri metin öbeklerini form elemanlarınız üzerinde defalarca deneyerek güvenlik duvarınızı aşmaya çalışırlar, bu yüzden güvenlik kodlarımızı text olarak değil de resim olarak kullanıp böyle bir ihtimale meydan vermeme yoluna gidiyoruz. Fakat adamlar durumu öyle psikopatlık derecesine taşıyıp kendilerini zarar vermek adına o kadar geliştirmişlerdir ki, web sayfasındaki metinleri tarama yöntemini geliştirip ekran okuma tekniğine terfi etmişlerdir, bu da ekranda (ister resim ister metin) okunaklı şekilde yazılan ne varsa bulup tekrar saldırmalarına olanak sağlamaktadır.
Peki nedir bu güvenlik kodu (captcha)?
Gelistirilmesinin amaci bilgisayar ile insanlari birbirinden ayirt ederek sitelere ve sunuculara gelecek olan anlik saldiri girisimlerini engellemek diyebiliriz. Daha net ifade etmek gerekirse genelde sitelere uye girisi, uye olma, yorum yapma gibi bolumlerde kullanilan, bilgisayar programlarinin, botlarin birden fazla girisimde bulunarak, siteyi hedef alan saldirilara yada icerigin calinmasina neden olan acigin kapatilmasina yaramaktadir.
Bir cok sitede gorursunuz genelde bunlari, bazen resim uzerine karakter bulunur, bazen de bir soru seklinde cikar karsimiza. Ancak en cok kullanilan ornegi resim uzerine restgele karakterler bastirarak giris yapan kisinin bu harfleri dogrulamasini istemektir.“Lütfen yandaki güvenlik kodunu giriniz” ibaresini gördüğünüz sitelerde, belki canınız sıkılarak “ulan okunmuyo bee” dediğiniz, abidik gubidik anlamsız harf ve rakam kombinasyonlarını ifade etmektedir. Ancak bu “her capthca botlar tarafından okunamaz” anlamına gelmiyor tabi, iyi bir capthca için bir takım kriterler vardır; en önemli unsur insanlar tarafından okunabilen fakat botların algılayamadığı karakterler kullanılmasıdır. Bunun için standart dışı fontlar kullanmanız, zeminde fontun botlar tarafından algılanmasını güçleştirecek unsurlara (çizgiler, noktalar) ve değişik renklere yer vermeniz, her defasında ekrana farklı kombinasyonlar bastırmanız gerekmektedir.
Biraz araştırma yaptıktan sonra bu konuda başarılı reCAPTCHA ve Secure Image Captchaya rastladım. reCAPCAHA genelde forumlarda rastladığ ücretsiz bot önleme servisi olarak çalışıyor. Securimage, gerek entegrasyonu, gerekse üzerinde yapabileceğiniz değişiklikler açısından çok başarılı bir PHP betiği. PHP’nin GD kütüphanesi ile çalışıyor ve yazı tipi, kelime listesi gibi bir çok ayarı istediğiniz şekildeyapabiliyorsunuz. Şimdi ise betiği projelerinize şu şekilde entegre edebilirsiniz.
Öncelikle phpcaptcha adresten betiği indirip zip arşivinden çıkardıktan securimage klasörünü projeniz içine kopyalıyorsunuz. Securimage klasörünün /securimage/ olduğunu varsayıyorum. Daha sonra formunuzda güvenlik kodunu göstermek için aşağıdaki kodu formunuza yerleştiriyorsunuz:
1. Adım sayfasmıza güvenlik kodunu ekliyoruz.
- <img id="captcha" src="securimage/securimage_show.php" alt="Güvenlik Kodu" />
2. Adım Eğer kullanıcıların güvenlik kodunu görmeme ihtimalini göz önünde bulundurup, formumuza bir de güvenlik kodunu yenileme linki koymak istiyorsak aşağıdaki kodu kullanıyoruz
3. Adım ( Opsiyonel) Görme yetisini kaybetmiş veya güvenlik kodunu tam seçemeyen kullanıcılarınızın formu kullanma ihtimalini göz önünde bulundurup bir de kodu dinleme seçeneği sunabilirsiniz. Bunu formunuza eklemek için aşağıdaki kodu eklemeniz yeterli olacaktır. Seslendirmeler ingilizce olduğu için ben bu adkullanmadım.
4. Adım Güvenlik kodunu gireceğimiz yazı alanı ve gönder butonu ekliyoruz.
Artık formumuza güvenlik kodunu eklemiş bulunuyoruz. Bundan sonraki kısım ise form gönderildikten sonra güvenlik kodunun doğru olup olmadığının kontrol edilmesi. Bu kısım da betiğin bize sağladığı bir fonksiyon sayesinde gayet basit bir şekilde uygulanabiliyor.
5. Adım Formun gönderildiğinde verinin yollandığı PHP dosyamızı açıyoruz ve en tepeye aşağıdaki fonksiyonumuzu ekliyoruz. Ben action=”" kısımını boş bıraktığım için kendi üzerine post edecektir.
6. Adım Securimage sınıfını çağırmak için aşağıdaki kodu formun işlendiği kodun öncesine ekliyoruz.
- include_once("securimage/securimage.php");
- $securimage = new Securimage();
7. Adım Artık güvenlik kodu sınıfımızı çağırdığımıza göre, sınıfımızda bulunan check fonksiyonu ile gönderilen güvenlik kodunun doğru olup olmadığını kontrol edebilir ve eğer güvenlik kodu yanlış ise kullanıcıya bir uyarı verdirebiliriz. Bu işlemi gerçekleştirmek içinse aşağıdaki yöntemi kullanıyoruz.
- if ($securimage->check($_POST['guvenlikKodu']) == false) {
- echo 'Girdiğiniz güvenlik kodu yanlıştır! Lütfen tekrar deneyiniz.';
- }else{
- //Güvenlik kodunun doğru olması halince yapılacak işlemler
- echo 'Tebrikler Doğru';
- }
- }
Uygulamamızın son hali KAYNAK KODU. Buradan İNDİR
- <?php
-
- include_once("securimage/securimage.php");
- $securimage = new Securimage();
-
- if ($securimage->check($_POST['guvenlikKodu']) == false) {
- echo 'Girdiğiniz güvenlik kodu yanlıştır! Lütfen tekrar deneyiniz.';
- }else{
- //Güvenlik kodunun doğru olması halince yapılacak işlemler
- echo 'Tebrikler Doğru';
- }
- }
- ?>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
- <title>Securimage Örnek Form</title>
- </head>
- <body>
- <br />
- <img id="captcha" src="securimage/securimage_show.php" alt="Güvenlik Kodu">
- <a href="#" onclick="document.getElementById('captcha').src = 'securimage/securimage_show.php?' + Math.random(); return false">Resimi Yenile</a>
- <br />
- <form method="post" action="">
- <input type="text" name="guvenlikKodu" />
- <input type="submit" name="gonder" value="Gönder" />
- </form>
- </body>
- </html>
Betiğin kullanımını anlattıktan sonra, PHP sınıfının içinde bulunan değişkenlerin görevlerinden de biraz bahsetmek istiyorum.
Bu değişkenlerin değerlerini, betiğimizin PHP sınıfı dosyası olan securimage.php dosyasını açıp düzenleyebilirsiniz.
securimage.php dosyası içerisinde
$image_width: Ekrana bastırılacak olan güvenlik kodunun piksel boyutunda genişliği
$image_height: Ekrana bastırılacak olan güvenlik kodunun piksel boyutunda yüksekliği
$image_type: Ekrana bastırılacak olan güvenlik kodunun resim formatı (SI_IMAGE_PNG, SI_IMAGE_JPG, SI_IMAGE_GIF olmak üzere sadece 3 değer alabilir)
$code_length: Güvenlik kodumuzun uzunluğu(karakter sayısı)
$charset: Güvenlik kodunda kullanılacak olan karakterler(yazı tipi buraya girdiğiniz karakterleri desteklemelidir, aksi takdirde sorunlar çıkabilir)
$wordlist_file: Kelime listesi dosyası. Eğer güvenlik kodunun sizin belirlediğiniz kelimelerden oluşmasını istiyorsanız bu bölüme oluşturduğunuz kelime listenizin yolunu girmeniz gerekmektedir.
$use_wordlist: Güvenlik kodunda kelime listesinin kullanılıp kullanılmayacağı. true ve false olmak üzere 2 değer alabilir.
Betiğin çalışması için sunucunuzda bulunması gereken özellikler şunlardır:
4.3.0 veya üstü PHP versiyonu
GD kütüphanesi desteği.
Session desteği.
Daha fazla bilgi için buraya tıklayarak betiğin sayfasına gidebilir veya şuraya tıklayarak betiğin hızlı başlangıç kılavuzunu okuyabilirsiniz.
Bu konuda problem yaşayan arkadaşlar yorum alanından belirtebilir. Yardımcı olacağımızdan emin olabilirsiniz.
Gelen Arama Kelimeleri:
- pal captcha kontrol nedir
- security code ne demek
- ltfen gvenlik kodunu kontrol ediniz
- captcha kodu doğru değil
- paypal captcha kontrolü
- Captcha Kodu Nedir
- yandaki kodu giriniz:
- php kontrol kodu
- Lütfen captcha kodunu kontrol ediniz ne demek
- \ güvenlik kodu catchpa nedir
Benzer Konular
10 Responses to “Php Güvenlik Kodu (captcha) Kontrolü”
merhabalar
sitemde secureimage sistemini kullanacağım. ancak sorunum, yanlış giriş sonucu form sayfasına dönüldüğünde veriler yok olduğu için uygulamak istediğim java script ile bu resim kontrolünü yaptıramadım. bir öneriniz olabilir mi?
Nasıl bir şey yapmak istediğinizi ve hangi aşamada takıldığınızı tam olarak anlayamadım. Size yolladığım maile isteğinizi detaylı anlatmanız halinde yardımcı olamaya çalışırım.
slm arkadaşım bunu nasıl entegre edecez işe yaramıyor kafayı yedim çoook güzel ama halen olmuyor
Tarif- Ekleme Formu
Kategori
:
<?php
include("../ayar.php");
$sor= mysql_query("select * from skat where id");
while($yaz= mysql_fetch_array($sor)){
$katid= $yaz["id"];
$kat= $yaz["kat"];
echo"$kat”;
}
?>
Başlık
:
Malzemeler
:
Metin
:
generate_wysiwyg(‘metin’);
Resim
:
Kategori
:
< ?php
session_start();
//Secure image kütüphanesini ekliyoruz
include_once("securimage/securimage.php");
$securimage = new Securimage();
//Kod Kontrolü
if(isset($_POST['guvenlikKodu'])){
if ($securimage->check($_POST['guvenlikKodu']) == false) {
echo ‘Girdiğiniz güvenlik kodu yanlıştır! Lütfen tekrar deneyiniz.’;
}else{
//Güvenlik kodunun doğru olması halince yapılacak işlemler
echo ‘Tebrikler Doğru’;
}
}
include(“../ayar.php”);
$sor= mysql_query(“select * from skat where id”);
while($yaz= mysql_fetch_array($sor)){
$katid= $yaz["id"];
$kat= $yaz["kat"];
echo”$kat”;
}
?>
Başlık
:
Malzemeler
:
Metin
:
generate_wysiwyg(‘metin’);
Resim
:
1,2 ve 4. adımdaki html kodlarını eklemen gerek
Merhaba,
Securimage kullanarak sayfama CAPTCHA atmaya çalışıyorum.
Sayfaya embed ettim. İmage görünüyor.
Fakat text gelmiyor. Hata olarak: “Failed to load ttf file” diyor.
PHP versiyonu ile mi ilgili olabilir? (Mevcut sürüm:3.5.2)
Yoksa font seçimini değiştirmek gerekir?
Yardımcı olursanız sevinirim.
Hata ile hiç karşılaşmadım fakat php sürümünün font işlemesinden problem var gibi duruyor. Tavsiyem sürüm yükselt.
Teşekkürler
Ben kendim yükseltebiliyor muyum?
Yoksa hosting hizmeti aldığım İHS mi yükseltecek?
İhs kullanmadığım için bilmiyorum. Sen her halikarda destek talebi aç ve sürüm yükselmesini onların yapmasını iste.
Tamamdır. Teşekkürler