İşte PHP ile Cloudflare Turnstile entegrasyonunu anlatan detaylı ve SEO uyumlu bir blog makalesi:
PHP ile Cloudflare Turnstile Entegrasyonu: Kapsamlı Rehber
İnternet sitelerinin güvenliği, günümüzde giderek artan bot saldırıları ve kötü niyetli aktiviteler nedeniyle hayati önem taşımaktadır. Cloudflare Turnstile, kullanıcı deneyimini olumsuz etkilemeden botları engellemek için tasarlanmış, gizlilik odaklı ve kullanıcı dostu bir alternatiftir. Bu makalede, PHP projelerinize Cloudflare Turnstile'ı nasıl entegre edeceğinizi adım adım açıklayacağız. Gerekli kod örneklerini sunarak, entegrasyon sürecini kolayca tamamlamanıza yardımcı olacağız.
Cloudflare Turnstile Nedir?
Cloudflare Turnstile, CAPTCHA'lara bir alternatiftir. Web sitelerinizi botlardan korurken, kullanıcıların karmaşık bulmacaları çözmek zorunda kalmadan sorunsuz bir deneyim yaşamasını sağlar. Gelişmiş makine öğrenimi tekniklerini kullanarak, insan ve bot trafiğini ayırt eder ve böylece sitenizin güvenliğini artırır.
Turnstile'ın Avantajları
- Kullanıcı Dostu: CAPTCHA'lara kıyasla çok daha az kullanıcı etkileşimi gerektirir.
- Gizlilik Odaklı: Kullanıcı verilerini minimize ederek gizliliği ön planda tutar.
- Yüksek Güvenlik: Gelişmiş bot algılama algoritmaları sayesinde etkili koruma sağlar.
- Ücretsiz: Cloudflare'in ücretsiz planında da kullanılabilir.
Cloudflare Turnstile Kurulumu
Turnstile'ı kullanmaya başlamak için öncelikle bir Cloudflare hesabınızın olması gerekir. Eğer hesabınız yoksa, Cloudflare web sitesinden ücretsiz bir hesap oluşturabilirsiniz.
Site Key ve Secret Key Oluşturma
1. Cloudflare hesabınıza giriş yapın. 2. Websites bölümüne gidin ve Turnstile'ı kullanmak istediğiniz siteyi seçin. 3. Sol menüden Turnstile'ı seçin. 4. Add Site butonuna tıklayın ve domain adresinizi girin. 5. Turnstile'ı hangi sayfalarda kullanmak istediğinizi belirtin (örneğin, sadece form sayfalarında). 6. Gerekli ayarları yapılandırın ve Create butonuna tıklayın. 7. Oluşturulan site için bir Site Key ve bir Secret Key göreceksiniz. Bu anahtarları güvenli bir yerde saklayın, çünkü entegrasyon sırasında bunlara ihtiyacınız olacak.
PHP Projesine Turnstile Entegrasyonu
Turnstile entegrasyonu iki aşamadan oluşur:
1. Ön Uç (Frontend) Entegrasyonu: Turnstile widget'ını web sayfanıza ekleme. 2. Arka Uç (Backend) Entegrasyonu: Form gönderildiğinde Turnstile yanıtını doğrulama.
Ön Uç Entegrasyonu (HTML)
Turnstile widget'ını formunuzun bulunduğu HTML sayfasına ekleyin. Aşağıdaki kodu etiketinin içine veya formun hemen üstüne ekleyebilirsiniz. Ardından, Turnstile widget'ını formunuza ekleyin. Bu genellikle bir etiketi içinde yapılır.Adınız: E-postanız:
SİTE_ANAHTARINIZ kısmını, Cloudflare panelinde oluşturduğunuz Site Key ile değiştirmeniz gerekmektedir.
Arka Uç Entegrasyonu (PHP)
Form gönderildiğinde, Turnstile yanıtını (yani cf-turnstile-response alanını) Cloudflare sunucularına göndererek doğrulamamız gerekir. Aşağıdaki PHP kodunu, formunuzun gönderildiği islem.php dosyasına ekleyin.
// Gizli anahtarınızı buraya girin. $secret = 'GİZLİ_ANAHTARINIZ';// Turnstile yanıtını alın. $response = $_POST['cf-turnstile-response']; // İstemcinin IP adresini alın. $remoteip = $SERVER['REMOTEADDR']; // Cloudflare'e doğrulama isteği gönderin. $url = 'https://challenges.cloudflare.com/turnstile/v0/siteverify'; $data = array( 'secret' => $secret, 'response' => $response, 'remoteip' => $remoteip ); $options = array( 'http' => array( 'header' => "Content-type: application/x-www-form-urlencoded\r\n", 'method' => 'POST', 'content' => httpbuildquery($data) ) ); $context = streamcontextcreate($options); $result = filegetcontents($url, false, $context); $verification = json_decode($result); // Yanıtı kontrol edin. if ($verification->success) { // Turnstile doğrulaması başarılı oldu. echo "Form başarıyla gönderildi!"; // Burada form verilerini işleyebilirsiniz. } else { // Turnstile doğrulaması başarısız oldu. echo "Bot olduğunuz tespit edildi. Lütfen tekrar deneyin."; // Hata mesajını görüntüleyebilirsiniz. // Hata kodlarını da kontrol edebilirsiniz: // print_r($verification->{'error-codes'}); } ?>
GİZLİ_ANAHTARINIZ kısmını, Cloudflare panelinde oluşturduğunuz Secret Key ile değiştirmeniz gerekmektedir.
Detaylı Açıklama
$secret: Cloudflare panelinden aldığınız gizli anahtar. Bu anahtar, sunucunuz ile Cloudflare arasındaki iletişimi güvence altına alır.$_POST['cf-turnstile-response']: Form gönderildiğinde Turnstile widget'ı tarafından oluşturulan ve gönderilen yanıt.$SERVER['REMOTEADDR']: İstemcinin IP adresi. Bu, ek bir güvenlik katmanı sağlar.$url: Cloudflare'in doğrulama API'sinin adresi.$data: Cloudflare'e gönderilecek veriler (gizli anahtar, yanıt ve IP adresi).httpbuildquery($data): Verileri application/x-www-form-urlencoded formatına dönüştürür.filegetcontents($url, false, $context): Cloudflare'e POST isteği gönderir ve yanıtı alır.json_decode($result): JSON formatındaki yanıtı PHP nesnesine dönüştürür.$verification->success: Doğrulama işleminin başarılı olup olmadığını gösteren bir boolean değer.$verification->{'error-codes'}: Doğrulama başarısız olduysa, hata kodlarını içeren bir dizi.
Hata Yönetimi
Doğrulama başarısız olduğunda, $verification->{'error-codes'} dizisini kontrol ederek hata nedenini belirleyebilirsiniz. Bazı yaygın hata kodları şunlardır:
missing-input-secret: Gizli anahtar eksik.invalid-input-secret: Gizli anahtar geçersiz.missing-input-response: Yanıt eksik.invalid-input-response: Yanıt geçersiz.bad-request: İstek hatalı.timeout-or-duplicate: Yanıt zaman aşımına uğradı veya tekrarlandı.
Bu hata kodlarına göre kullanıcıya uygun bir hata mesajı gösterebilirsiniz.
Gelişmiş Özellikler ve Yapılandırma
Cloudflare Turnstile, daha gelişmiş özellikler ve yapılandırma seçenekleri sunar.
Farklı Widget Tipleri
Turnstile, farklı widget tipleri sunar:
- Managed: Cloudflare, kullanıcıya hangi zorlukların sunulacağına karar verir.
- Invisible: Kullanıcı etkileşimi gerektirmeyen, arka planda çalışan bir widget.
- Non-interactive: Kullanıcıdan sadece bir onay kutusunu tıklamasını isteyen bir widget.
Widget tipini, data-type özelliğini kullanarak belirleyebilirsiniz. Örneğin:
Tema Seçimi
Turnstile widget'ının temasını, data-theme özelliğini kullanarak değiştirebilirsiniz. İki tema seçeneği vardır: light (varsayılan) ve dark.
Dil Seçimi
Turnstile widget'ının dilini, data-language özelliğini kullanarak belirleyebilirsiniz. Örneğin, Türkçe için tr kullanabilirsiniz.
Callback Fonksiyonları
Turnstile, doğrulama tamamlandığında veya hata oluştuğunda çalıştırılacak callback fonksiyonları tanımlamanıza olanak tanır.
data-callback: Doğrulama başarılı olduğunda çalıştırılır.data-error-callback: Doğrulama başarısız olduğunda çalıştırılır.data-expired-callback: Yanıt süresi dolduğunda çalıştırılır.
function turnstileCallback() { // Doğrulama başarılı olduğunda yapılacak işlemler alert("Doğrulama başarılı!"); }</p><p>function turnstileErrorCallback() { // Doğrulama başarısız olduğunda yapılacak işlemler alert("Doğrulama başarısız!"); }
JavaScript API
Turnstile, JavaScript API'si aracılığıyla da kontrol edilebilir. Örneğin, widget'ı manuel olarak yeniden yüklemek için:
turnstile.reset();
Veya, widget'ın yanıtını almak için:
var response = turnstile.getResponse();
Güvenlik İpuçları
- Gizli Anahtarınızı Güvende Tutun: Gizli anahtarınızı asla istemci tarafında (JavaScript, HTML) veya herkese açık bir yerde (örneğin, GitHub) paylaşmayın.
- Sunucu Tarafında Doğrulama Yapın: Her zaman Turnstile yanıtını sunucu tarafında doğrulayın. İstemci tarafında yapılan doğrulama kolayca atlatılabilir.
- Ek Güvenlik Katmanları Ekleyin: Turnstile'ı, diğer güvenlik önlemleriyle birlikte kullanın (örneğin, giriş denemesi sınırlaması, iki faktörlü kimlik doğrulama).
- Hata Kodlarını İzleyin: Doğrulama hatalarını düzenli olarak izleyin ve olası sorunları tespit edin.
Sonuç
Cloudflare Turnstile, web sitenizi botlardan korurken, kullanıcı deneyimini iyileştiren güçlü ve kullanıcı dostu bir çözümdür. Bu makalede, PHP projelerinize Turnstile'ı nasıl entegre edeceğinizi adım adım açıkladık. Gerekli kod örneklerini ve yapılandırma seçeneklerini sunarak, entegrasyon sürecini kolaylaştırmayı amaçladık. Unutmayın, güvenlik sürekli bir süreçtir ve Turnstile gibi araçları kullanarak sitenizi her zaman korumanız önemlidir.