Gereksinimler ve Ön Hazırlık
Başarılı bir entegrasyon için geliştirme ortamınızın güncel olması gerekir. PHP 8.2 veya üzeri bir sürüm kullanmanız, performans ve güvenlik güncellemelerinden tam olarak yararlanmanızı sağlar. Ayrıca, istekleri doğrulamak için cURL kütüphanesinin aktif olması gerekmektedir.
- PHP 8.2+ sürümü yüklü bir yerel geliştirme ortamı (XAMPP, Docker veya benzeri).
- Composer paket yöneticisi (kütüphane bağımlılıklarını yönetmek için).
- Google reCAPTCHA v3 veya Cloudflare Turnstile gibi modern bir servis sağlayıcıdan alınan API anahtarları.
Eski yöntem olan "resim üzerindeki karakterleri okuma" (legacy Captcha) sistemleri artık botlar tarafından kolayca çözülebildiği için, bu rehberde "token tabanlı" ve "davranışsal analiz" yapan modern servisleri temel alacağız.
Captcha Servisi Seçimi ve Karşılaştırma
Hangi servisi kullanacağınız, projenizin ihtiyaçlarına ve kullanıcı kitlenize bağlıdır. Aşağıdaki tablo, 2026 yılı itibarıyla en popüler ve güvenli seçenekleri özetlemektedir.
| Servis | Avantaj | Dezavantaj |
|---|---|---|
| Google reCAPTCHA v3 | Görünmez doğrulama, yüksek güvenlik | Gizlilik endişeleri |
| Cloudflare Turnstile | Kullanıcı dostu, gizlilik odaklı | Cloudflare bağımlılığı |
| hCaptcha | Veri gizliliği, ödül sistemi | Bazen zorlayıcı bulmacalar |
Adım Adım Entegrasyon: İstemci Tarafı (Frontend)
Entegrasyonun ilk adımı, formun bulunduğu HTML sayfasına gerekli JavaScript kütüphanesini eklemektir. Bu kütüphane, kullanıcının siteyle etkileşimini analiz ederek sunucuya gönderilmek üzere bir "token" üretir.
Gönder
grecaptcha.ready(function() {
grecaptcha.execute('SITENIZIN_SITE_KEY', {action: 'iletisim'}).then(function(token) {
document.getElementById('recaptchaResponse').value = token;
});
});
Bu kod bloğu, sayfa yüklendiğinde otomatik olarak bir token üretir ve bunu formdaki gizli alana yerleştirir. Böylece kullanıcı formu gönderdiğinde, sunucu tarafında bu token'ı doğrulamamız mümkün olur.
Sunucu Tarafında Doğrulama (Backend)
Form gönderildiğinde, PHP tarafında bu token'ı Google API'sine gönderip doğruluğunu teyit etmeliyiz. Bu işlem, güvenliğin en kritik noktasıdır; çünkü istemci tarafındaki JavaScript manipüle edilebilir, ancak sunucu tarafındaki doğrulama manipüle edilemez.
Burada $result['score'] değeri, Google'ın kullanıcının insan olma olasılığına verdiği puandır. 0.0 (bot) ile 1.0 (insan) arasında değişir. 0.5 eşik değeri, çoğu standart web sitesi için idealdir.
Güvenlik Uyarıları ve En İyi Pratikler
Kritik Uyarı: API anahtarlarınızı asla istemci tarafındaki JavaScript dosyalarında açıkça bırakmayın. Secret Key (Gizli Anahtar) her zaman sunucu tarafında, çevresel değişkenlerde (environment variables) veya güvenli bir yapılandırma dosyasında tutulmalıdır. Aksi takdirde, saldırganlar anahtarınızı ele geçirerek doğrulama sistemini bypass edebilir.
Ayrıca, form gönderimlerinde mutlaka CSRF (Cross-Site Request Forgery) koruması kullanın. Captcha, sadece botları engeller; ancak CSRF koruması, yetkili bir kullanıcının oturumunun kötüye kullanılmasını engeller. İkisini birlikte kullanmak, form güvenliğinizi en üst seviyeye çıkarır.
Hata Ayıklama ve Yaygın Sorunlar
Entegrasyon sırasında en sık karşılaşılan sorun, API anahtarlarının yanlış yapılandırılması veya sunucunun dış dünyaya kapalı olmasıdır. cURL istekleri zaman aşımına uğruyorsa, sunucunuzun dış API'lere erişim iznini kontrol edin.
- Geçersiz Token Hatası: Token'ın süresi dolmuş olabilir. Formun gönderilme süresini kontrol edin.
- Score Düşüklüğü: Eğer gerçek kullanıcılar engelleniyorsa, eşik değerini (0.5) biraz düşürerek test edin.
- SSL Sorunları: API istekleri HTTPS üzerinden yapılmalıdır. Yerel ortamda SSL sertifikası hatası alıyorsanız,
CURLOPT_SSL_VERIFYPEERseçeneğini test amaçlı geçici olarak kapatabilirsiniz ancak üretim ortamında asla kapatmayın.
Sıkça Sorulan Sorular
Captcha neden gerekli?
Web siteleri, otomatik botlar tarafından sürekli taranır. Captcha, bu botların formlarınızı doldurmasını, sahte hesaplar açmasını veya veritabanınızı spam verilerle doldurmasını engeller.
reCAPTCHA v3 kullanıcıyı rahatsız eder mi?
Hayır, v3 görünmezdir. Kullanıcıya herhangi bir bulmaca göstermez, arka planda davranışsal analiz yapar.
PHP'de Captcha kullanmak performansı etkiler mi?
Doğrulama işlemi sunucu tarafında bir API isteği gerektirdiği için milisaniyelik bir gecikme yaşanabilir. Ancak bu, güvenlik için ihmal edilebilir bir maliyettir.
Kendi Captcha sistemimi yazabilir miyim?
Teknik olarak evet, ancak modern botlar basit matematiksel işlemleri veya resimdeki yazıları kolayca çözebilmektedir. Profesyonel servisler, devasa veri setleriyle eğitilmiş modeller kullandığı için çok daha güvenlidir.
Mobil cihazlarda Captcha çalışır mı?
Evet, modern Captcha kütüphaneleri duyarlı (responsive) tasarıma sahiptir ve mobil tarayıcılarla tam uyumlu çalışır.
Honeypot Tekniği ile İkinci Savunma Hattı
Captcha sistemleri kullanıcı etkileşimi gerektirdiği için bazen kullanıcı deneyimini (UX) kısıtlayabilir. Honeypot, kullanıcıya görünmeyen ancak botlar tarafından doldurulması muhtemel gizli alanlar kullanarak, Captcha'yı tetiklemeden önce botları filtrelemenizi sağlar. Bu yöntem, sunucu yükünü azaltmak için mükemmel bir ön filtreleme mekanizmasıdır.
Honeypot Uygulama Mantığı
Temel mantık, CSS ile gizlenmiş bir input alanının form içerisine yerleştirilmesidir. Gerçek kullanıcılar bu alanı göremez ve doldurmaz; ancak formları tarayan botlar, tüm input alanlarını doldurmaya meyilli oldukları için bu alanı da doldururlar.
Sunucu tarafında ise bu alanın boş olup olmadığını kontrol eden basit bir PHP mantığı kurarız:
if (!empty($_POST['website_url'])) {
// Bot olduğu tespit edildi, işlemi durdur
die("Erişim engellendi.");
}
Captcha Performansını Optimize Etme ve Asenkron Yükleme
Captcha kütüphanelerinin harici script dosyaları, sayfa yüklenme hızını (LCP - Largest Contentful Paint) olumsuz etkileyebilir. Özellikle yoğun trafik alan projelerde, Captcha scriptlerini asenkron olarak yüklemek ve sadece formun bulunduğu sayfalarda tetiklemek kritik öneme sahiptir.
Koşullu Script Yükleme Stratejisi
Tüm sayfalarda Captcha scriptini çağırmak yerine, sadece ilgili formun olduğu sayfalarda scriptin yüklenmesini sağlamak için bir kontrol mekanizması kullanın. Aşağıdaki örnek, scriptin sadece belirli bir sayfada yüklenmesini sağlar:
İleri Düzey İpuçları
- Rate Limiting: Aynı IP adresinden gelen istek sayısını sınırlandırın. Captcha doğru olsa bile, çok kısa sürede çok fazla istek atan IP'leri geçici olarak engelleyin.
- Log Kayıtları: Doğrulama başarısız olduğunda, bu girişimleri veritabanında veya bir log dosyasında tutun. Bu, saldırı paternlerini analiz etmenize yardımcı olur.
- Sunucu Tarafı Cache: Captcha doğrulama sonuçlarını çok kısa süreliğine (örneğin 30 saniye) cache'leyerek, aynı formun mükerrer gönderimlerinde API limitlerinizi koruyun.
Bu ek güvenlik katmanları, Captcha sisteminizi daha dirençli hale getirirken, sistem kaynaklarınızın verimli kullanılmasını sağlar. Unutmayın, güvenlik bir bütündür; Captcha sadece bu bütünün bir parçasıdır.
Sonuç
PHP ile güvenli Captcha entegrasyonu, web projelerinizi korumak için atabileceğiniz en etkili adımlardan biridir. Bu rehberde, token tabanlı doğrulamanın mantığını, sunucu tarafındaki kontrol mekanizmalarını ve güvenlik stratejilerini inceledik. Unutmayın ki güvenlik statik bir durum değil, sürekli güncellenmesi gereken bir süreçtir.
Bir sonraki adım olarak, formlarınızda Captcha'nın yanı sıra "honeypot" (bal küpü) tekniğini de kullanarak, botlara karşı ikinci bir savunma hattı oluşturmayı araştırabilirsiniz. Güvenli kodlamalar dilerim.
Yasal Sorumluluk Reddi: Bu makalede paylaşılan kod örnekleri eğitim amaçlıdır. Uygulamanızın canlı ortamındaki güvenlik açıklarından ve veri kayıplarından geliştirici sorumludur. Her zaman en güncel kütüphaneleri takip edin ve projenizi düzenli olarak güvenlik taramalarından geçirin.


Yorumlar (0)
Yorum Yaz