Cloudflare Turnstile: nasıl çalışır, sizin tarafınızdan ne görür ve nasıl kurulur — adım adım rehber
Makale içeriği
- Giriş: bu rehberden ne elde edeceksiniz
- Ön hazırlık: araçlar ve erişimler
- Temel kavramlar: cloudflare turnstile nasıl çalışır
- Adım 1: turnstile'ın sizin tarafınızdan tam olarak ne gördüğünü anlayın
- Adım 2: cloudflare panelinde widget oluşturun
- Adım 3: widget'ı formlu sayfaya yerleştirin
- Adım 4: sunucu tarafı token doğrulamasını yapılandırın
- Adım 5: widget'ı test anahtarlarıyla tüm modlarda test edin
- Adım 6: mobil proxy üzerinden turnstile'a ziyaretçi gözüyle bakın
- Sonuç kontrolü: nihai kontrol listesi
- Sık yapılan hatalar ve çözümleri
- İ̇leri düzey kullanıcılar için ek özellikler
- Sss: cloudflare turnstile hakkında sık sorulan sorular
- Sonuç
Giriş: bu rehberden ne elde edeceksiniz
Cloudflare Turnstile, son zamanlarda resimli klasik captcha'nın yerini alan, dönen bir daire ve "Doğrulanıyor" yazısıyla karşımıza çıkan küçük bir widget'tır. Kayıt formlarında, e-ticaret sepetlerinde, açılış sayfalarında ve hizmetlerin kullanıcı panellerinde bulunur. Normal bir ziyaretçi onu neredeyse fark etmez. Ancak mobil proxy üzerinden çalışan ve günde onlarca site açan bir pazarlamacı, arbitrajcı veya geliştirici için bu widget bir bilmeceye dönüşür. Neden bir profilde doğrulama saniyeler içinde geçerken, diğerinde widget düşünür, onay kutusu ister veya hata kodu verir?
Bu rehberde Cloudflare Turnstile'ı iki taraftan ele alacağız. Site sahibi tarafından — kendi elinizle sayfaya widget'ı kuracak, sunucu tarafı doğrulamayı yapacak ve istatistikleri okumayı öğreneceksiniz. Ziyaretçi tarafından — Turnstile'ın hangi sinyalleri topladığını, tarayıcınız, ağınız ve proxy'niz hakkında ne gördüğünü ve neden belirli bir karar verdiğini anlayacaksınız. Bu bilgi, formlarını botlardan koruyanlar için de, çalışma profillerinin doğrulamada normal kullanıcı gibi görünmesini isteyenler için de aynı derecede faydalıdır.
Bu rehber kimler için
- Spam başvuruları ve sahte kayıtlar nedeniyle istatistikleri bozulan ve bütçesi eriyen işletme sahipleri ve pazarlamacılar için.
- Turnstile'ı hızlı ve hatasız bir şekilde forma entegre etmesi ve token'ı sunucuda doğru şekilde doğrulaması gereken geliştiriciler için.
- Mobil proxy üzerinden çalışan ve Turnstile'ın bağlantılarında ne gördüğünü anlamak isteyen arbitrajcılar ve çoklu hesap uzmanları için.
Önceden bilmeniz gerekenler
Özel bir bilgi gerekmez. HTML sayfasının ne olduğunu anlamanız, tarayıcıda geliştirici konsolunu açabilmeniz ve sunucuda herhangi bir dille (PHP, Node.js, Python) en azından temel deneyime sahip olmanız yeterlidir. Sunucu tarafınız yoksa bile rehberin büyük bir kısmını tamamlayabilirsiniz: widget'ı yerel bir sayfada kurup test edebilirsiniz.
Ne kadar zaman gerekir
Tamamı yaklaşık bir buçuk-iki saat sürer. Kayıt ve widget oluşturma 10-15 dakika, sayfaya yerleştirme 20 dakika, sunucu doğrulaması 30-40 dakika, test ve tanılama ise 30 dakika daha alır. Teorik bölümleri istediğiniz sırayla okuyabilir ve gerektikçe geri dönebilirsiniz.
Ön hazırlık: araçlar ve erişimler
Başlamadan önce gerekli her şeyi toplayın. Bu, süreç ortasında duraklamaları önler.
Gerekli araçlar ve erişimler
- Cloudflare hesabı. Ücretsizdir. E-posta ile birkaç dakikada kayıt olunur. Alan adını Cloudflare'a taşımak zorunlu değildir — Turnstile nerede barınırsa barınsın her sitede çalışır.
- Site veya test sayfası. Form içeren herhangi bir HTML sayfası uygundur. Yerel denemeler için bilgisayarınızda basit bir yerel sunucu üzerinden açılan bir dosya yeterlidir.
- Sunucu ortamı. PHP destekli herhangi bir hosting ya da makinenizde Node.js veya Python. Rehberin ikinci yarısı — token doğrulama — için gereklidir.
- Modern bir tarayıcı. Geliştirici araçları açık, güncel sürüm Chrome, Firefox, Edge veya Safari.
- IP değiştirebilen mobil proxy. Tanılama bölümünde, widget'ın farklı ağlara ve adres rotasyonuna nasıl tepki verdiğini görmek için gerekli olacaktır.
Sistem gereksinimleri
Turnstile zorlu değildir. Widget, modern JavaScript'i destekleyen her tarayıcıda çalışır ve kodunu challenges.cloudflare.com alan adından yükler. Ağınızda veya tarayıcı uzantılarınızda bu alan adı engelliyse widget yüklenmez — test ederken bunu göz önünde bulundurun. Sunucu doğrulaması için giden HTTPS istekleri yapabilme imkânı gerekir.
Başlamadan önce hazırlanacaklar
- Not almak için bir metin dosyası oluşturun. İçine site key, widget adı, hostname listesi ve test sonuçlarını yazacaksınız.
- Korumak istediğiniz formun bulunduğu sayfayı açın ve tarih notuyla birlikte bir kopyasını kaydedin. Bu sizin yedek kopyanızdır.
- Formu işleyen bir sunucu tarafınız varsa onun da kopyasını alın. İçine doğrulama kodu ekleyeceğiz.
- Yerel veya canlı sunucunuzun sayfayı HTTPS üzerinden ya da localhost aracılığıyla sunduğundan emin olun. Turnstile normal HTTP üzerinden de çalışır, ancak canlı sitede yine de HTTPS'e ihtiyacınız olacak.
⚠️ Dikkat: Widget'ın gizli anahtarı HTML'de, sayfadaki JavaScript'te veya herkese açık bir depoda saklanamaz. Yalnızca sunucuda bulunur. Yanlışlıkla yayınladıysanız, Cloudflare panelinden hemen anahtarı yeniden oluşturun — eski anahtar çalışmayı bırakacaktır.
Temel kavramlar: Cloudflare Turnstile nasıl çalışır
Sonraki adımların anlaşılır olması için temel terimleri basit bir dille ele alalım.
Temel terimler
- Widget — ziyaretçinin gördüğü blok. Teknik olarak Cloudflare alan adından yüklenen ve sayfanıza gömülen bir iframe'dir.
- Site key — widget'ın herkese açık kimliği. HTML'e yerleştirilir ve herkes tarafından görülebilir. Cloudflare bu anahtarla hangi widget'ın çizileceğini ve hangi alan adlarına izin verildiğini anlar.
- Secret key — gizli anahtar. Sunucunuz gelen token'ın gerçek olduğunu bununla doğrular. Asla sunucudan ayrılmaz.
- Token — widget'ın başarılı doğrulamadan sonra ürettiği dizedir. Formdaki gizli bir alana konur ve diğer verilerle birlikte sunucunuza gider.
- Siteverify — sunucunuzun token'ı gizli anahtarla birlikte gönderdiği ve başarılı mı değil mi yanıtını aldığı Cloudflare uç noktasıdır.
- Widget modu — gösterim şekli: yönetilen (Managed), etkileşimsiz (Non-interactive) veya görünmez (Invisible). Fark aşağıda açıklanmıştır.
- Hostname — widget'ın kullanılmasına izin verilen alan adı. Alan adı belirtilmezse widget hata vererek çalışmayı reddeder.
Dört cümlede çalışma prensibi
- Sayfa Turnstile betiğini yükler ve widget tarayıcıda sessizce bir dizi kontrol başlatır.
- Cloudflare sonuçları toplar, ağ verileriyle birlikte değerlendirir ve karar verir: hemen geçir, onay için kutu göster veya reddet.
- Başarı durumunda widget tek kullanımlık bir token üretir ve form'a yerleştirir.
- Sunucunuz formu alır, token'ı siteverify'a gönderir ve yalnızca olumlu yanıtta başvuruyu işler.
Turnstile neyi kontrol eder — genel tablo
Burada en önemlisi şudur: Cloudflare Turnstile, "insanlığı" resimli bulmacalarla ölçmez. Ortam tutarlılığını değerlendirir: tarayıcı, ağ ve davranışın inandırıcı tek bir tabloda uyuşup uyuşmadığını. Ana sinyal grupları:
- Tarayıcı ortamı. Betik bir dizi küçük JavaScript görevi çalıştırır ve ortamın gerçek bir tarayıcı gibi davrandığını kontrol eder: pencere nesnelerinin yapısı, grafiklerin çizimi, otomasyon izleri olup olmadığı, bildirilen User-Agent'ın motorun gerçek yetenekleriyle uyuşup uyuşmadığı.
- İş kanıtı. Widget tarayıcıdan küçük bir hesaplama yapmasını ister. Bir insan için bu saniyenin altındadır; binlerce sayfa açan bir bot için ise ciddi bir yüktür.
- Ağ sinyalleri. İsteğin çıktığı IP adresinin ve otonom sistemin (yani operatörün) itibarı, ağ özelliklerinin bildirilen tarayıcıyla uyumu, bu adresten tüm Cloudflare ağında yapılan istek geçmişi.
- Cihaz güven token'ları. Apple cihazlarda ve diğer bazı ekosistemlerde Turnstile işletim sisteminden karşısındakinin gerçek bir cihaz olduğuna dair onay isteyebilir — bu durumda doğrulama hiç hesaplama yapılmadan geçer.
- Sayfadaki davranış. Widget'ın görünme zamanı, formun gönderilme anı, yönetilen modda eylemlerin doğallığı.
Turnstile'ın yapmadıkları: reklam profili çıkarmak için veri toplamaz, üçüncü taraf cookie'ler aracılığıyla kullanıcıyı siteler arası izlemez ve asla resimli bulmaca göstermez. Bu hem kişisel verilerin korunması hukuku açısından hem de dönüşüm açısından önemlidir — ziyaretçiler can sıkıcı captcha yüzünden ayrılmaz.
Üç widget modu
- Managed — varsayılan moddur. Widget görünür, göstergeyi döndürür ve şüpheye düşerse basılması gereken bir onay kutusu gösterir. Çoğu form için uygundur.
- Non-interactive — widget görünür ancak asla eylem istemez. Ya kendiliğinden geçer ya da hata verir. Fazladan tıklamaya izin verilemeyen sayfalar için iyidir.
- Invisible — widget hiç çizilmez. Doğrulama arka planda yürür. Tasarımı değiştirmek istemediğiniz düğmeler ve formlar için kullanışlıdır, ancak hataların dikkatli işlenmesini gerektirir.
Adım 1: Turnstile'ın sizin tarafınızdan tam olarak ne gördüğünü anlayın
Bu aşamanın amacı: bir şey kurmadan önce, widget'ın ortamınız hakkında hangi verileri aldığını anlamalısınız. Bu, sonraki adımlardaki tanılama ve mobil proxy üzerinden bilinçli çalışma için temeldir.
Widget'ın çalışmasını kendi gözlerinizle nasıl görürsünüz
- Cloudflare Turnstile'ın bulunduğu herhangi bir siteyi açın. Bu widget'ları bloğun sağ alt köşesindeki Cloudflare logosu ve "Gizlilik" ve "Şartlar" bağlantılarından kolayca tanıyabilirsiniz.
- F12'ye basın veya sağ tıklayıp "İncele"yi seçerek geliştirici araçlarını açın.
- "Network" (Ağ) sekmesine geçin ve sayfayı yenileyin.
- Filtre satırına challenges.cloudflare.com yazın. Birkaç istek göreceksiniz: api.js yüklemesi, widget iframe'inin yüklemesi ve bir veya birden fazla POST isteği — bu kontrollerin sonuçlarının gönderilmesidir.
- "Elements" (Öğeler) sekmesini açın ve cf-turnstile sınıfına sahip bloğu bulun. Başarılı doğrulamadan sonra içinde cf-turnstile-response adlı gizli bir input alanı ve değerinde uzun bir dize belirecektir. Bu token'dır.
İpucu: POST isteklerinin içeriği şifrelenmiş ve karıştırılmıştır; okumak işe yaramaz. Başka şeylere bakın: kaç istek gitti, doğrulama ne kadar sürdü ve widget'ın durumu "Success" oldu mu. Sizin dışsal güven göstergeniz budur.
Turnstile tarayıcınız hakkında ne görür
Widget JavaScript'i doğrudan pencerenizde çalıştırır, dolayısıyla sayfadaki herhangi bir betiğin erişebildiği her şeye erişebilir: motor sürümü, yüklü API'ler, ekran boyutları, saat dilimi, arayüz dilleri, grafik ve yazı tipi çizim özellikleri, otomatikleştirilmiş tarayıcılarda sıklıkla yeniden tanımlanan fonksiyonların davranışı. Dosyalarınızı okumaz ve diğer sekmelere girmez. Ancak tarayıcının bir şey söyleyip başka bir şey yaptığını çok iyi fark eder. Örneğin, User-Agent "Android'de Chrome" derken ortamda dokunmatik olaylar yoktur ve mobil cihazlarda bulunmayan API'ler vardır.
Turnstile ağınız hakkında ne görür
Mobil proxy üzerinden çalışanlar için en ilginç kısım burada başlar. Widget'ın tüm istekleri Cloudflare sunucularına gider, yani Cloudflare dış IP adresinizi, otonom sisteminizi (yani operatörünüzü), ülkenizi ve bağlantının alt seviye özelliklerini — istemcinizin güvenli bağlantıyı tam olarak nasıl kurduğunu — görür. Bu özellikler tarayıcıdan tarayıcıya farklıdır ve Cloudflare bunları bildirilen User-Agent ile karşılaştırır.
Mobil operatörler adresleri büyük ortak havuzlardan verir; bir adresin arkasında aynı anda yüzlerce gerçek abone oturur. Bu nedenle bu tür adresler doğaları gereği tarafsız veya iyi itibara sahiptir — onları engellemek gerçek insanları engellemek anlamına gelir. Ancak itibar sinyallerden yalnızca biridir. Mobil bir adresten masaüstü betiğinin ağ parmak izine sahip, farklı bir kıtada saat dilimi olan ve otomasyon izleri taşıyan bir tarayıcı geliyorsa tablo uyuşmaz ve widget etkileşimli moda geçer veya reddeder.
Turnstile davranışınız hakkında ne görür
Yönetilen modda widget, formun yüklemeden sonra ne kadar hızlı gönderildiğine, kullanıcının sayfayla etkileşip etkileşmediğine ve onay kutusu tıklamasının doğal görünüp görünmediğine dikkat eder. Görünmez ve etkileşimsiz modlarda davranış bileşeni en azdır — karar ortam ve ağ üzerinden verilir.
✅ Kontrol: Bu aşamada Network sekmesini açabilmeli, challenges.cloudflare.com'a yapılan istekleri filtreleyebilmeli, gizli cf-turnstile-response alanını görebilmeli ve üç sinyal grubunu (tarayıcı, ağ, davranış) kendi kelimelerinizle açıklayabilmelisiniz. Bunu başardıysanız, kendi widget'ınızı oluşturmaya geçin.
Olası sorunlar
- challenges.cloudflare.com'a hiç istek yok. Muhtemelen alan adı tarayıcı uzantısı veya kurumsal filtre tarafından engelleniyor. Test sırasında reklam engelleyicileri devre dışı bırakın.
- Widget sonsuza kadar doğrulama durumunda kalıyor. Bilgisayarınızın sistem saatini kontrol edin: gerçek zamanla ciddi fark doğrulamayı bozar.
Adım 2: Cloudflare panelinde widget oluşturun
Bu aşamanın amacı: bir çift anahtar — site key ve secret key — almak ve alan adı listesi ile çalışma modunu doğru yapılandırmak.
- Cloudflare kontrol panelini açın ve hesaba giriş yapın. Hesabınız yoksa "Sign up"a tıklayın, e-posta ve şifre girin, e-postayı doğrulayın.
- Sol menüde Turnstile öğesini bulun. Birden fazla hesabınız varsa önce ana sayfada doğru olanı seçin.
- Mavi Add widget (Widget ekle) düğmesine tıklayın.
- Widget name alanına anlaşılır bir ad girin, örneğin "Açılış sayfası başvuru — ana". Ad yalnızca sizin tarafınızdan görülür, ancak onlarca widget'ta karışıklığı önler.
- Hostname management bloğunda Add hostnames'e tıklayın ve widget'ın çalışacağı alan adlarını girin. Protokol ve yol olmadan girin: https://example.ru/form değil, example.ru. Alt alan adları ayrı ayrı eklenmeli ya da kök alan adı belirtilmeli — o zaman alt alan adları da izinli olur.
- Yerel testler için listeye localhost ekleyin. Bu resmi olarak desteklenir ve canlı çalışmayı etkilemez.
- Widget Mode bloğunda modu seçin. İlk seferde Managed'i seçin — böylece etkileşimli dahil tüm widget durumlarını görürsünüz.
- Pre-clearance seçeneğini şimdilik kapalı bırakın. Yalnızca site Cloudflare üzerinden proxy'leniyorsa gereklidir; ileri düzey bölümünde konuşacağız.
- Create'e tıklayın.
- Sonraki ekranda iki alan göreceksiniz: Site Key ve Secret Key. İkisini de not dosyanıza kopyalayın. Gizli anahtar daha sonra widget ayarlarından görülebilir, ancak hemen kaydetmek daha uygundur.
İpucu: Hemen iki widget oluşturun — biri canlı alan adı için, diğeri "Test" adıyla ve localhost hostname'i ile. Böylece çalışan widget'ın istatistiklerine dokunmadan modlar ve ayarlarla deney yaparsınız.
Doğru sonuç nasıl görünür
Turnstile listesinde widget adı, modu ve hostname listesiyle bir kart görünecek. Site key "0x" ile başlar ve yaklaşık 24 karakter uzunluğundadır; secret key de "0x" ile başlar ancak daha uzundur. Anahtar farklı görünüyorsa büyük olasılıkla yanlış alanı kopyaladınız.
✅ Kontrol: Not dosyanızda site key, secret key, widget adı, hostname listesi ve seçilen mod kayıtlı. Cloudflare panelinde widget listede aktif durumda görünüyor.
Olası sorunlar
- Create düğmesi etkin değil. Hiç hostname eklenmemiş ya da hatalı girilmiş (protokol, eğik çizgi, boşluk).
- Menüde Turnstile öğesi bulunamıyor. Belirli bir alan adının ayarları içindesiniz. Hesap düzeyine dönün — Turnstile bölgede değil, orada yaşar.
Adım 3: Widget'ı formlu sayfaya yerleştirin
Bu aşamanın amacı: widget sayfanızda görünsün, doğrulamayı geçsin ve token'ı forma yerleştirsin.
Betiği bağlayın
- Formlu sayfanın HTML dosyasını düzenleyicide açın.
- head etiketi içine veya kapanış body etiketinden önce betik bağlantı satırını ekleyin:
<script src='https://challenges.cloudflare.com/turnstile/v0/api.js' async defer></script>async ve defer nitelikleri sayfanın betiğin yüklenmesini beklememesini sağlar. Widget biraz sonra görünür, ancak kullanıcı içerik yüklemesinde gecikme görmez.
Widget kapsayıcısını yerleştirin
- Koruduğunuz formu bulun. Genellikle ad, e-posta, telefon alanlarını içeren form etiketidir.
- Gönderme düğmesinin hemen öncesine cf-turnstile sınıfına sahip boş bir blok ve site key'inizi ekleyin:
<form action='/submit.php' method='POST'> <input type='text' name='name' placeholder='Adınız'> <input type='email' name='email' placeholder='E-posta'> <div class='cf-turnstile' data-sitekey='SİZİN_SITE_KEY' data-theme='light'></div> <button type='submit'>Gönder</button> </form>- SİZİN_SITE_KEY'i not dosyanızdaki anahtarla değiştirin. Gizli anahtarı buraya koymak yasaktır.
- Dosyayı kaydedin ve sayfayı tarayıcıda localhost üzerinden açın.
Ne görmelisiniz
Yüklemeden bir-iki saniye sonra bloğun yerinde yaklaşık 300 x 65 piksel boyutunda bir widget görünecek. Önce yükleme göstergesini ve "Verifying" yazısını, ardından yeşil bir onay işareti ve "Success" gösterir. Cloudflare ortamı yeniden kontrol etmeye karar verdiyse "Verify you are human" yazılı bir onay kutusu görünür — tıklayın, bir an sonra widget başarıyı gösterir.
Geliştirici araçlarını, Elements sekmesini açın ve cf-turnstile bloğunu genişletin. İçinde cf-turnstile-response adlı gizli bir input alanı belirdi. Değeri uzun bir token'dır. Form gönderildiğinde sunucuya gidecek olan tam da budur.
Kapsayıcının faydalı nitelikleri
- data-theme — light, dark veya auto. Auto, kullanıcının sistem temasına uyum sağlar.
- data-size — normal, compact veya flexible. Flexible, widget'ı kapsayıcının genişliğine yayar — mobil düzen için kullanışlıdır.
- data-language — dil kodu, örneğin tr. Varsayılan olarak widget tarayıcının dilini alır.
- data-action — kısa etiket, örneğin login veya checkout. siteverify yanıtında geri döner ve istatistiklerde formları ayırt etmeye yardımcı olur.
- data-callback — başarıdan sonra çağrılacak JavaScript fonksiyonunun adı. Token bu fonksiyona gelir.
- data-error-callback — bir şeyler ters giderse hata kodunu alacak fonksiyon.
- data-refresh-expired — token eskidiğinde ne yapılacağı: auto kendisi yeniden ister, manual yenileme düğmesi gösterir, never hiçbir şey yapmaz.
İpucu: Hemen data-error-callback ekleyin ve hata kodunu konsola yazdırın. Turnstile kodları bilgilendiricidir: 110xxx serisi anahtar veya alan adı sorunlarını, 300xxx serisi tarayıcıda yürütme hatasını, 600xxx serisi doğrulamanın geçilmediğini belirtir. Bu olmadan widget neden sessiz kalıyor diye tahmin yürütürsünüz.
Alternatif yol: JavaScript ile açık render
Bir framework içinde çalışıyorsanız veya widget'ın görünme anını kontrol etmek istiyorsanız, örtük render yerine açık render kullanın. Betik adresine render=explicit parametresini ekleyin ve turnstile.render'ı gerekli parametrelerle çağırın:
turnstile.render('#my-widget', { sitekey: 'SİZİN_SITE_KEY', theme: 'auto', action: 'signup', callback: function(token) { console.log('Token alındı', token.length); } });Bu yöntem, hatadan sonra widget'ı turnstile.reset yöntemiyle yeniden çizmenize ve turnstile.getResponse yöntemiyle geçerli token'ı almanıza olanak tanır.
✅ Kontrol: Widget sayfada görünüyor, "Success" gösteriyor, DOM'da token'lı cf-turnstile-response alanı var, konsolda hata yok. Sayfayı üç-dört kez yenilemeyi deneyin — her seferinde yeni bir token görünmeli.
Olası sorunlar
- Widget 110200 hatası gösteriyor. Sayfanın açıldığı alan adı widget'ın hostname'lerine eklenmemiş. localhost üzerinden açtığınızdan emin olun; 127.0.0.1 veya file:// farklı hostname'lerdir.
- Widget görünmüyor, konsol boş. Betik yüklenmedi. Betik adresinde yazım hatası olup olmadığını ve engelleyici bulunmadığını kontrol edin.
- Widget düzeni bozuyor. data-size='flexible' kullanın veya bloğu istediğiniz genişlikte bir kapsayıcıya sarın.
Adım 4: Sunucu tarafı token doğrulamasını yapılandırın
Bu aşamanın amacı: sunucu, geçerli token olmadan yapılan tüm form gönderimlerini reddetsin. Bu en önemli adımdır — onsuz widget sadece bir süs olarak kalır, çünkü bot sayfayı atlayarak doğrudan POST isteği gönderebilir.
siteverify isteği nasıl yapılandırılır
Sunucunuz https://challenges.cloudflare.com/turnstile/v0/siteverify adresine şu alanlarla POST isteği gönderir:
- secret — gizli anahtarınız;
- response — cf-turnstile-response alanındaki token;
- remoteip — ziyaretçinin IP'si, zorunlu değil ama faydalı;
- idempotency_key — isteğe bağlı benzersiz istek tanımlayıcısı, ileri düzey bölümünde bahsedeceğiz.
Yanıt olarak JSON gelir. Temel alanlar:
{ "success": true, "challenge_ts": "2026-03-14T10:22:31.000Z", "hostname": "example.ru", "error-codes": [], "action": "signup", "cdata": "" }Token 300 saniye yaşar ve tek kullanımlıktır. Aynı token'ı tekrar doğrulamak timeout-or-duplicate hatası verir.
PHP örneği
- Form işleyiciyi açın, örneğin submit.php.
- En başta, form verileriyle herhangi bir işlem yapmadan önce doğrulama bloğunu ekleyin:
<?php $token = $_POST['cf-turnstile-response'] ?? ''; if ($token === '') { http_response_code(400); exit('Doğrulama geçilmedi: token yok'); } $data = [ 'secret' => getenv('TURNSTILE_SECRET'), 'response' => $token, 'remoteip' => $_SERVER['REMOTE_ADDR'] ]; $ch = curl_init('https://challenges.cloudflare.com/turnstile/v0/siteverify'); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); $raw = curl_exec($ch); curl_close($ch); $result = json_decode($raw, true); if (empty($result['success'])) { http_response_code(403); exit('Doğrulama geçilmedi: ' . implode(',', $result['error-codes'] ?? ['no-response'])); }