Bu makalede tüm önemli sorulara cevap vermeye çalıştık. Bir problemi çözmeye başlamanın ilk adımı, hangi koruma sisteminin kullanıldığını belirlemektir. Bunun için, görsel örneklerin ve neyle karşı karşıya olduğunuzu hızlıca anlamanıza yardımcı olabilecek temel işaretlerin yer aldığı popüler captcha ve anti-bot koruma sistemleri listesine başvurabilirsiniz.
Sitenizde Cloudflare Turnstile kullanıldığını fark ederseniz, bir sonraki adım özelliklerini ve çalışma şeklini daha ayrıntılı incelemek olacaktır. Yine bu makalede, Cloudflare Turnstile sisteminin entegrasyonuna ilişkin kılavuzu da bulabilir ve böylece sitenizde nasıl çalıştığını tamamen anlayabilirsiniz. Bu da yalnızca mevcut korumayı anlamanıza değil, aynı zamanda bakımını doğru şekilde planlamanıza da yardımcı olur.
Cloudflare Turnstile içeren formları test ederken, captchanın düzgün çalıştığını ve doğru entegre edildiğini doğrulamanız gerekir.
Sitenize yerleştirilen captchayı manuel olarak test edebilirsiniz.
Otomatik çözüm için CapMonster Cloud gibi araçlar kullanabilirsiniz. Captcha parametrelerini alır, kendi sunucularında işler ve hazır bir token döndürür. Bu tokenı forma ekleyerek kullanıcı müdahalesi olmadan doğrulamayı geçebilirsiniz.
CapMonster Cloud API ile çalışma genellikle şu adımlardan oluşur:
Cloudflare Turnstile'ı çözmek için istekte aşağıdaki parametrelerin belirtilmesi gerekir:
type - TurnstileTask;
websiteURL - CAPTCHA'nın çözüldüğü sayfanın adresi;
websiteKey - Turnstile anahtarı.
https://api.capmonster.cloud/createTask{
"clientKey": "API_KEY",
"task": {
"type": "TurnstileTask",
"websiteURL": "http://tsmanaged.zlsupport.com",
"websiteKey": "0x4AAAAAAABUYP0XeMJF0xoy"
}
}{
"errorId":0,
"taskId":407533072
}https://api.capmonster.cloud/getTaskResult{
"clientKey":"API_KEY",
"taskId": 407533072
}{
"errorId": 0,
"status": "ready",
"solution": {
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36",
"token": "0.iGX3xsyFCkbGePM3jP4P4khLo6TrLukt8ZzBvwuQOvbC...f61f3082"
}
}// npm install playwright @zennolab_com/capmonstercloud-client
import { chromium } from "playwright";
import { CapMonsterCloudClientFactory, ClientOptions, TurnstileRequest } from "@zennolab_com/capmonstercloud-client";
async function main() {
// 1. CapMonster Cloud aracılığıyla Turnstile çözümü
const cmcClient = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: 'YOUR_CAPMONSTER_API_KEY' })
);
const turnstileRequest = new TurnstileRequest({
websiteURL: 'http://tsmanaged.zlsupport.com',
websiteKey: '0x4AAAAAAABUYP0XeMJF0xoy',
});
const result = await cmcClient.Solve(turnstileRequest);
const token = result.solution.token;
console.log('Turnstile token'ı alındı:', token);
// 2. Playwright başlatılıyor
const browser = await chromium.launch({ headless: false });
const context = await browser.newContext();
const page = await context.newPage();
await page.goto('http://tsmanaged.zlsupport.com');
// 3. Giriş ve şifre doldurma
await page.fill('#username', 'your_username');
await page.fill('#password', 'your_password');
// 4. Gizli token alanının görünmesini bekleme
await page.waitForSelector('#token', { state: 'attached', timeout: 60000 });
// 5. Token ekleme ve alanı görünür hale getirme
await page.evaluate((t) => {
const tokenInput = document.querySelector('#token');
if (tokenInput) {
tokenInput.type = 'text'; // alanı görünür hale getir
tokenInput.value = t; // token ekle
console.log('Token, token alanına eklendi');
} else {
console.error('#token alanı bulunamadı');
}
}, token);
// 6. Token'ın gerçekten eklendiğini doğrulama
const checkValue = await page.$eval('#token', el => el.value);
console.log('Token değerinin kontrolü:', checkValue);
// 7. Form gönderme
await page.click('button[type="submit"]');
console.log('Form Turnstile token'ıyla gönderildi');
// await browser.close();
}
main().catch(err => console.error(err));1. Cloudflare Turnstile sayfasına gidin, Şimdi Başlayın'a tıklayın.
2. Hizmete kaydolun.
3. Turnstile Widgets'ta mavi Add Widget düğmesine tıklayın.

4. Cloudflare Turnstile'ı yapılandırın, belirtin:
5. Widget'ı oluşturduktan sonra iki anahtar alacaksınız—Site Key ve Secret Key.

6. İstemci tarafını bağlayın
1) Turnstile betiğini bağlayın
Otomatik oluşturma (widget sayfa yüklenirken otomatik olarak oluşturulur):
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>Programatik kontrol (widget'ı JavaScript aracılığıyla kendiniz oluşturursunuz):
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit" defer></script>Önemli: betik tam URL'den yüklenmelidir. Proxy veya önbellek hatalara neden olabilir.
2) Widget için bir konteyner oluşturun
Otomatik:
<div class="cf-turnstile" data-sitekey="<YOUR_SITEKEY>"></div>Programatik olarak:
<div id="turnstile-container"></div>3) Widget yapılandırması
Data öznitelikleri aracılığıyla:
<div class="cf-turnstile"
data-sitekey="<YOUR_SITEKEY>"
data-theme="light"
data-size="normal"
data-callback="onSuccess">
</div>JavaScript aracılığıyla:
const widgetId = turnstile.render("#turnstile-container", {
sitekey: "<YOUR_SITEKEY>",
theme: "light",
size: "normal",
callback: token => console.log("Token:", token)
});4) Token'larla çalışma
const token = turnstile.getResponse(widgetId); // token al
const isExpired = turnstile.isExpired(widgetId); // süre sonunu kontrol et
turnstile.reset(widgetId); // sıfırla
turnstile.remove(widgetId); // kaldır
turnstile.execute("#turnstile-container"); // manuel yürütme
5) Formla entegrasyon
<form id="my-form" method="POST">
<input type="hidden" name="cf-turnstile-response" id="cf-turnstile-response">
<button type="submit">Gönder</button>
</form>
<script>
function onSuccess(token) {
document.getElementById("cf-turnstile-response").value = token;
}
</script>
<title>Turnstile Example</title>
<!-- Turnstile betiğini bağla -->
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
</head>
<body>
<h1>Turnstile ile form örneği</h1>
<form id="my-form">
<label for="username">İsim:</label>
<input type="text" name="username" id="username" required>
<!-- Turnstile için konteyner -->
<div class="cf-turnstile" data-sitekey="<YOUR_SITEKEY>" data-callback="onTurnstileSuccess"></div>
<button type="submit">Gönder</button>
</form>
<script>
// CAPTCHA'dan geçtikten sonra çağrılan callback
function onTurnstileSuccess(token) {
console.log("Turnstile token'ı alındı:", token);
// Token'ı gizli form alanına kaydet (isteğe bağlı)
document.getElementById("cf-turnstile-token")?.remove();
const input = document.createElement("input");
input.type = "hidden";
input.name = "cf-turnstile-response";
input.id = "cf-turnstile-token";
input.value = token;
document.getElementById("my-form").appendChild(input);
}
// Form gönderimi
document.getElementById("my-form").addEventListener("submit", async (e) => {
e.preventDefault();
const formData = new FormData(e.target);
const response = await fetch("/submit-form", {
method: "POST",
body: formData
});
const result = await response.json();
if(result.success){
alert("Form başarıyla gönderildi ve token doğrulandı!");
} else {
alert("Turnstile token doğrulama hatası. Lütfen tekrar deneyin.");
// Kullanıcının CAPTCHA'yı tekrar tamamlayabilmesi için widget'ı sıfırla
turnstile.reset();
}
});
</script>
</body>
</html>
6) Sunucu tarafını yapılandırın
Sunucu tarafı doğrulama süreci:
Siteverify API:
https://challenges.cloudflare.com/turnstile/v0/siteverifyİstek parametreleri:
Token özellikleri:
<?php
function validateTurnstile($token, $secret, $remoteip = null) {
$url = 'https://challenges.cloudflare.com/turnstile/v0/siteverify';
$data = ['secret' => $secret, 'response' => $token];
if ($remoteip) $data['remoteip'] = $remoteip;
$options = [
'http' => [
'header' => "Content-type: application/x-www-form-urlencoded
",
'method' => 'POST',
'content' => http_build_query($data)
]
];
$response = file_get_contents($url, false, stream_context_create($options));
if ($response === FALSE) {
return ['success' => false, 'error-codes' => ['internal-error']];
}
return json_decode($response, true);
}
// Kullanım
$secret_key = 'YOUR_SECRET_KEY';
$token = $_POST['cf-turnstile-response'] ?? '';
$remoteip = $_SERVER['REMOTE_ADDR'];
$result = validateTurnstile($token, $secret_key, $remoteip);
if($result['success']){
echo "Form başarıyla gönderildi!";
} else {
echo "Doğrulama hatası: " . implode(', ', $result['error-codes']);
}
?>
Kodu üzerinde erişiminiz olmayan, ancak üzerinde zaten bir captcha veya başka bir koruma sistemi kurulmuş bir site devraldıysanız, sorun değil! Hangi teknolojinin kullanıldığını tespit etmek oldukça kolaydır. Çalışmanın düzgün olup olmadığını kontrol etmek için ise, izole bir test ortamında CapMonster Cloud tanıma servisinden yararlanarak, jeton işleme mekanizmasının ve doğrulama mantığının doğru şekilde çalıştığından emin olabilirsiniz.
Cloudflare Turnstile söz konusu olduğunda, sistemi tanımlamak, davranışını incelemek ve korumanın düzgün çalıştığını doğrulamak yeterlidir. Bu yazıda, Cloudflare Turnstile nasıl tespit edilir ve entegrasyonu ya da yeniden yapılandırılması için talimatların nerede bulunabileceği gösterdik; böylece korumayı güvenle sürdürebilir ve çalışmasını kontrol altında tutabilirsiniz.