In diesem Artikel haben wir versucht, alle wichtigen Fragen zu beantworten. Der erste Schritt bei der Lösung der Aufgabe besteht darin festzustellen, welches Schutzsystem eingesetzt wird. Dazu können Sie die Liste beliebter Captchas und Anti-Bot-Schutzsysteme heranziehen, in der visuelle Beispiele und zentrale Merkmale aufgeführt sind, die Ihnen helfen, schnell zu erkennen, womit Sie es zu tun haben.
Wenn Sie feststellen, dass auf Ihrer Website Cloudflare Turnstile eingesetzt wird, besteht der nächste Schritt darin, seine Eigenschaften und Funktionsweise genauer zu untersuchen. Ebenfalls in diesem Artikel finden Sie eine Anleitung zur Integration von Cloudflare Turnstile, damit Sie vollständig verstehen, wie das System auf Ihrer Website arbeitet. So können Sie nicht nur den aktuellen Schutz besser einschätzen, sondern auch seine Wartung vorausschauend planen.
Beim Testen von Formularen mit Cloudflare Turnstile müssen Sie häufig prüfen, ob die Captcha korrekt eingebunden ist und funktioniert.
Sie können die auf Ihrer Seite eingebettete Captcha manuell testen.
Für automatisches Lösen können Sie Tools wie CapMonster Cloud einsetzen. Der Dienst nimmt die Captcha-Parameter entgegen, verarbeitet sie auf seinen Servern und liefert einen einsatzbereiten Token zurück. Diesen Token setzen Sie ins Formular ein, um die Prüfung ohne Benutzerinteraktion zu bestehen.
Die Arbeit mit CapMonster Cloud über die API umfasst in der Regel folgende Schritte:
In der Anfrage zur Lösung von Cloudflare Turnstile müssen folgende Parameter angegeben werden:
type - TurnstileTask;
websiteURL - Adresse der Seite, auf der das CAPTCHA gelöst wird;
websiteKey - Turnstile-Schlüssel.
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. Turnstile-Lösung über CapMonster Cloud
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 erhalten:', token);
// 2. Playwright starten
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. Login und Passwort ausfüllen
await page.fill('#username', 'your_username');
await page.fill('#password', 'your_password');
// 4. Warten auf das versteckte Token-Feld
await page.waitForSelector('#token', { state: 'attached', timeout: 60000 });
// 5. Token einfügen und Feld sichtbar machen
await page.evaluate((t) => {
const tokenInput = document.querySelector('#token');
if (tokenInput) {
tokenInput.type = 'text'; // Feld sichtbar machen
tokenInput.value = t; // Token einfügen
console.log('Token ins Feld token eingefügt');
} else {
console.error('Feld #token nicht gefunden');
}
}, token);
// 6. Überprüfen, dass das Token tatsächlich eingefügt wurde
const checkValue = await page.$eval('#token', el => el.value);
console.log('Überprüfung des Token-Werts:', checkValue);
// 7. Formular absenden
await page.click('button[type="submit"]');
console.log('Formular mit Turnstile-Token abgeschickt');
// await browser.close();
}
main().catch(err => console.error(err));1. Gehen Sie zur Seite Cloudflare Turnstile, klicken Sie auf Jetzt starten.
2. Registrieren Sie sich beim Service.
3. Klicken Sie in Turnstile Widgets auf die blaue Schaltfläche Add Widget.

4. Konfigurieren Sie Cloudflare Turnstile, geben Sie an:
5. Nach Erstellung des Widgets erhalten Sie zwei Schlüssel – Site Key und Secret Key.

6. Clientseitigen Teil einbinden
1) Turnstile-Skript einbinden
Automatisches Rendering (Widget wird beim Laden der Seite selbst erstellt):
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>Programmgesteuert (Sie erstellen das Widget selbst über JavaScript):
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit" defer></script>Wichtig: Das Skript muss von der exakten URL geladen werden. Proxy oder Cache können zu Fehlern führen.
2) Container für Widget erstellen
Automatisch:
<div class="cf-turnstile" data-sitekey="<YOUR_SITEKEY>"></div>Programmgesteuert:
<div id="turnstile-container"></div>3) Widget-Konfiguration
Über data-Attribute:
<div class="cf-turnstile"
data-sitekey="<YOUR_SITEKEY>"
data-theme="light"
data-size="normal"
data-callback="onSuccess">
</div>Über JavaScript:
const widgetId = turnstile.render("#turnstile-container", {
sitekey: "<YOUR_SITEKEY>",
theme: "light",
size: "normal",
callback: token => console.log("Token:", token)
});4) Arbeit mit Token
const token = turnstile.getResponse(widgetId); // Token abrufen
const isExpired = turnstile.isExpired(widgetId); // Ablauf überprüfen
turnstile.reset(widgetId); // Zurücksetzen
turnstile.remove(widgetId); // Entfernen
turnstile.execute("#turnstile-container"); // Manueller Start
5) Integration mit Formular
<form id="my-form" method="POST">
<input type="hidden" name="cf-turnstile-response" id="cf-turnstile-response">
<button type="submit">Absenden</button>
</form>
<script>
function onSuccess(token) {
document.getElementById("cf-turnstile-response").value = token;
}
</script>
<title>Turnstile Example</title>
<!-- Turnstile-Skript einbinden -->
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
</head>
<body>
<h1>Formularbeispiel mit Turnstile</h1>
<form id="my-form">
<label for="username">Name:</label>
<input type="text" name="username" id="username" required>
<!-- Container für Turnstile -->
<div class="cf-turnstile" data-sitekey="<YOUR_SITEKEY>" data-callback="onTurnstileSuccess"></div>
<button type="submit">Absenden</button>
</form>
<script>
// Callback, der nach Durchlaufen des CAPTCHAs aufgerufen wird
function onTurnstileSuccess(token) {
console.log("Turnstile-Token erhalten:", token);
// Token in verstecktes Formularfeld speichern (optional)
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);
}
// Formular absenden
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("Formular erfolgreich abgeschickt und Token überprüft!");
} else {
alert("Fehler bei der Turnstile-Token-Überprüfung. Versuchen Sie es erneut.");
// Widget zurücksetzen, damit der Benutzer das CAPTCHA erneut durchlaufen kann
turnstile.reset();
}
});
</script>
</body>
</html>
6) Serverseitigen Teil konfigurieren
Prozess der serverseitigen Überprüfung:
Siteverify-API:
https://challenges.cloudflare.com/turnstile/v0/siteverifyAnfrageparameter:
Token-Eigenschaften:
<?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);
}
// Verwendung
$secret_key = 'YOUR_SECRET_KEY';
$token = $_POST['cf-turnstile-response'] ?? '';
$remoteip = $_SERVER['REMOTE_ADDR'];
$result = validateTurnstile($token, $secret_key, $remoteip);
if($result['success']){
echo "Formular erfolgreich abgeschickt!";
} else {
echo "Überprüfungsfehler: " . implode(', ', $result['error-codes']);
}
?>
Wenn Sie eine Website übernommen haben, auf der bereits ein Captcha oder ein anderes Schutzsystem installiert ist und Sie keinen Zugriff auf den Code haben, ist das kein Problem! Es ist ziemlich einfach festzustellen, welche Technologie genau verwendet wird. Und um die korrekte Funktionsweise zu überprüfen, können Sie den Erkennungsdienst CapMonster Cloud in einer isolierten Testumgebung nutzen, um sicherzustellen, dass der Mechanismus zur Tokenverarbeitung und die Prüflogik ordnungsgemäß funktionieren.
Im Fall von Cloudflare Turnstile reicht es aus, das System zu erkennen, sein Verhalten zu analysieren und sich zu vergewissern, dass der Schutz korrekt arbeitet. In diesem Artikel haben wir gezeigt, wie Sie Cloudflare Turnstile identifizieren und wo Sie Anleitungen für die Einbindung oder Neukonfiguration finden, damit Sie den Schutz zuverlässig betreiben und seine Arbeit unter Kontrolle halten können.