Prijzen van Cloudflare Turnstile-oplossing
| Bericht | Prijs (USD) |
|---|---|
$ 1.30 1000 tokens |
In dit artikel hebben we geprobeerd antwoord te geven op alle belangrijke vragen. De eerste stap bij het oplossen van het vraagstuk is vaststellen welk beveiligingssysteem wordt gebruikt. Daarvoor kun je de lijst met populaire captcha’s en anti-botbeveiligingssystemen raadplegen, met visuele voorbeelden en kernkenmerken die je helpen snel te bepalen waarmee je te maken hebt.
Als je ontdekt dat je website Cloudflare Turnstile gebruikt, is de volgende stap om de eigenschappen en werking ervan uitgebreider te bestuderen. In dit artikel vind je ook een handleiding voor het integreren van Cloudflare Turnstile, zodat je volledig begrijpt hoe het systeem op je website werkt. Zo kun je niet alleen de huidige bescherming beter doorgronden, maar ook het onderhoud ervan goed plannen.
Hoe Cloudflare Turnstile op te lossen via CapMonster Cloud
Bij het testen van formulieren met Cloudflare Turnstile moet je vaak bevestigen dat de captcha goed is ingebouwd en werkt.
Je kunt de captcha op je site handmatig testen.
- Open de pagina met het formulier en controleer of de captcha verschijnt.
- Probeer het formulier te versturen zonder oplossing — de server hoort een fout terug te geven.
- Na een succesvolle oplossing moet het formulier probleemloos worden verzonden.
Voor automatische oplossingen kun je tools zoals CapMonster Cloud gebruiken. Deze ontvangen de captcha-parameters, verwerken ze op hun servers en sturen een token terug dat je in het formulier kunt zetten om de controle zonder gebruikersinteractie te omzeilen.
Werken met CapMonster Cloud via de API bestaat doorgaans uit de volgende stappen:
In het verzoek om Cloudflare Turnstile op te lossen, moeten de volgende parameters worden opgegeven:
type - TurnstileTask;
websiteURL - adres van de pagina waar de CAPTCHA wordt opgelost;
websiteKey - Turnstile-sleutel.
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/150.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 oplossen via 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 ontvangen:', 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 en wachtwoord invullen
await page.fill('#username', 'your_username');
await page.fill('#password', 'your_password');
// 4. Wachten op het verschijnen van het verborgen tokenveld
await page.waitForSelector('#token', { state: 'attached', timeout: 60000 });
// 5. Token invoegen en veld zichtbaar maken
await page.evaluate((t) => {
const tokenInput = document.querySelector('#token');
if (tokenInput) {
tokenInput.type = 'text'; // veld zichtbaar maken
tokenInput.value = t; // token invoegen
console.log('Token ingevoegd in tokenveld');
} else {
console.error('Veld #token niet gevonden');
}
}, token);
// 6. Verifiëren dat het token daadwerkelijk is ingevoegd
const checkValue = await page.$eval('#token', el => el.value);
console.log('Tokenwaarde controleren:', checkValue);
// 7. Formulier verzenden
await page.click('button[type="submit"]');
console.log('Formulier verzonden met Turnstile-token');
// await browser.close();
}
main().catch(err => console.error(err));1. Ga naar de pagina Cloudflare Turnstile, klik op Nu beginnen.
2. Registreer bij de service.
3. Klik in Turnstile Widgets op de blauwe knop Add Widget.

4. Configureer Cloudflare Turnstile, specificeer:
- Widget name—naam van de CAPTCHA (voor het gemak, bijv. ,b>Login form).
- Hostname Management—domeinen waar de CAPTCHA werkt (bijv. example.com).
- Widget Mode:
- Managed—optimale optie, CAPTCHA beslist zelf of het selectievakje moet worden weergegeven.
- Non-interactive—verificatie wordt automatisch uitgevoerd zonder klikken.
- Invisible—volledig onzichtbaar.
- Pre-clearance—stel in op Yes als de site via Cloudflare Proxy loopt (om CAPTCHA niet te herhalen).
5. Na het maken van de widget ontvangt u twee sleutels—Site Key en Secret Key.

6. Koppel het client-side deel
1) Koppel het Turnstile-script
Automatische rendering (widget wordt automatisch gemaakt bij het laden van de pagina):
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>Programmatische controle (u maakt zelf de widget via JavaScript):
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js?render=explicit" defer></script>Belangrijk: het script moet worden geladen vanaf de exacte URL. Proxy of cache kunnen storingen veroorzaken.
2) Maak een container voor de widget
Automatisch:
<div class="cf-turnstile" data-sitekey="<YOUR_SITEKEY>"></div>Programmatisch:
<div id="turnstile-container"></div>3) Widget-configuratie
Via data-attributen:
<div class="cf-turnstile"
data-sitekey="<YOUR_SITEKEY>"
data-theme="light"
data-size="normal"
data-callback="onSuccess">
</div>Via JavaScript:
const widgetId = turnstile.render("#turnstile-container", {
sitekey: "<YOUR_SITEKEY>",
theme: "light",
size: "normal",
callback: token => console.log("Token:", token)
});4) Werken met tokens
const token = turnstile.getResponse(widgetId); // token ophalen
const isExpired = turnstile.isExpired(widgetId); // verloop controleren
turnstile.reset(widgetId); // resetten
turnstile.remove(widgetId); // verwijderen
turnstile.execute("#turnstile-container"); // handmatige uitvoering
5) Integratie met formulier
<form id="my-form" method="POST">
<input type="hidden" name="cf-turnstile-response" id="cf-turnstile-response">
<button type="submit">Verzenden</button>
</form>
<script>
function onSuccess(token) {
document.getElementById("cf-turnstile-response").value = token;
}
</script>
<title>Turnstile Example</title>
<!-- Turnstile-script koppelen -->
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
</head>
<body>
<h1>Formuliervoorbeeld met Turnstile</h1>
<form id="my-form">
<label for="username">Naam:</label>
<input type="text" name="username" id="username" required>
<!-- Container voor Turnstile -->
<div class="cf-turnstile" data-sitekey="<YOUR_SITEKEY>" data-callback="onTurnstileSuccess"></div>
<button type="submit">Verzenden</button>
</form>
<script>
// Callback die wordt aangeroepen na het voltooien van de CAPTCHA
function onTurnstileSuccess(token) {
console.log("Turnstile-token ontvangen:", token);
// Token opslaan in verborgen formulierveld (optioneel)
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);
}
// Formulierverzending
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("Formulier succesvol verzonden en token geverifieerd!");
} else {
alert("Fout bij Turnstile-tokenverificatie. Probeer het opnieuw.");
// Widget resetten zodat de gebruiker de CAPTCHA opnieuw kan voltooien
turnstile.reset();
}
});
</script>
</body>
</html>
6) Configureer het server-side deel
Server-side verificatieproces:
- Client: gebruiker voltooit Turnstile op de pagina → token wordt aangemaakt.
- Formulier wordt verzonden: token wordt samen met formuliergegevens naar de server verzonden.
- Server: doet een POST-verzoek naar Cloudflare Siteverify API met token en geheim.
- Cloudflare: retourneert JSON met resultaat (success: true/false) en aanvullende informatie (action, hostname, voltooiingstijd).
- Server: beslist of de gebruikersactie moet worden toegestaan of geweigerd.
Siteverify API:
https://challenges.cloudflare.com/turnstile/v0/siteverifyVerzoekparameters:
- secret (verplicht): geheime Turnstile-sleutel uit het Cloudflare-paneel
- response (verplicht): token ontvangen op de client
- remoteip (optioneel): IP-adres van de gebruiker (aanbevolen)
- idempotency_key (optioneel): unieke UUID voor bescherming tegen herhaalde verificaties
Token-eigenschappen:
- Maximale lengte: 2048 tekens
- Geldig voor 5 minuten
- Eenmalig gebruik
- Bij verlopen of hernieuwde verificatie retourneert de API de fout timeout-or-duplicate
<?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);
}
// Gebruik
$secret_key = 'YOUR_SECRET_KEY';
$token = $_POST['cf-turnstile-response'] ?? '';
$remoteip = $_SERVER['REMOTE_ADDR'];
$result = validateTurnstile($token, $secret_key, $remoteip);
if($result['success']){
echo "Formulier succesvol verzonden!";
} else {
echo "Verificatiefout: " . implode(', ', $result['error-codes']);
}
?>
Ondersteunde captchas
Als je een website in beheer krijgt waarop al een captcha of een ander beveiligingssysteem is geïnstalleerd en je geen toegang hebt tot de code, is dat geen probleem! Het is vrij eenvoudig te bepalen welke technologie precies wordt gebruikt. Voor het controleren of alles correct werkt, kun je de herkenningsservice CapMonster Cloud in een geïsoleerde testomgeving gebruiken, zodat je zeker weet dat het tokenverwerkingsmechanisme en de validatielogica correct functioneren.
In het geval van Cloudflare Turnstile is het voldoende om het systeem te herkennen, het gedrag te analyseren en te bevestigen dat de beveiliging correct werkt. In het artikel hebben we laten zien hoe je Cloudflare Turnstile kunt herkennen en waar je instructies vindt om het te koppelen of opnieuw te configureren, zodat je de bescherming met vertrouwen kunt onderhouden en de werking onder controle kunt houden.