Cloudflare Turnstile
en CapMonster Cloud

CAPTCHA-oplossing, website-installatie en testen.

Prijzen van Cloudflare Turnstile-oplossing

Bericht
Prijs (USD)
$ 1.30
1000 tokens
Heb je een site geërfd met een ingebouwde captcha of andere bescherming, maar zonder toegang tot de broncode? Dan wil je natuurlijk weten welke oplossing draait, of die goed is ingesteld en hoe je de werking test.

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.

Wat is Cloudflare Turnstile
Wat is Cloudflare Turnstile
Cloudflare Turnstile is een moderne CAPTCHA van Cloudflare die websites beschermt tegen geautomatiseerde acties. Voor websitebezoekers is de verificatie bijna onzichtbaar, er hoeven geen taken te worden voltooid: meestal volstaat één klik op het selectievakje, waarna het systeem beslist of de bezoeker wordt doorgelaten of geblokkeerd bij vermoeden van een bot. In tegenstelling tot Cloudflare Challenge wordt de Turnstile CAPTCHA direct op de website geplaatst, niet in een apart venster—meestal in login- of registratieformulieren.

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:

Taak aanmakenTaak aanmaken
arrow
API-aanvraag versturenAPI-aanvraag versturen
arrow
Resultaat ontvangenResultaat ontvangen
arrow
Token op de pagina plaatsenToken op de pagina plaatsen
arrow
Cloudflare Turnstile-herkenning met kant-en-klare bibliotheken
De CapMonster Cloud-service biedt kant-en-klare bibliotheken voor comfortabel werken in de talen Python, JavaScript (Node.js) en C#.
Python
JavaScript
C#
Oplossing, token-invoeging en formulierverzending
Voorbeeld in Node.js voor de volledige cyclus van CAPTCHA-herkenning op uw webpagina. Mogelijke benaderingen: gebruik HTTP-verzoeken om HTML en CAPTCHA-parameters te verkrijgen, het antwoord te verzenden en het resultaat te verwerken; of met automatiseringstools (bijv. Playwright)—pagina openen, op CAPTCHA wachten, parameters verzenden (voor testen kunt u zowel correcte als onjuiste gegevens verzenden), oplossing verkrijgen via CapMonster Cloud-client, token in het formulier invoegen en resultaat zien.
python
// 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));
Hoe Cloudflare Turnstile aan uw website te koppelen
Om met vertrouwen te navigeren in de werking van CAPTCHA op uw website, de logica van de verificatie te begrijpen, het opnieuw te koppelen of opnieuw te configureren, raden we u aan deze sectie te bestuderen. Het beschrijft het proces van het aansluiten van de beveiliging—dit zal u helpen alle nuances snel te begrijpen.

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.

HowTo Connect image 1

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.

HowTo Connect image 2

6. Koppel het client-side deel

1) Koppel het Turnstile-script

Automatische rendering (widget wordt automatisch gemaakt bij het laden van de pagina):

markup
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>

Programmatische controle (u maakt zelf de widget via JavaScript):

markup
<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:

markup
<div class="cf-turnstile" data-sitekey="<YOUR_SITEKEY>"></div>

Programmatisch:

markup
<div id="turnstile-container"></div>

3) Widget-configuratie

Via data-attributen:

markup
<div class="cf-turnstile"
            data-sitekey="<YOUR_SITEKEY>"
            data-theme="light"
            data-size="normal"
            data-callback="onSuccess">
          </div>

Via JavaScript:

javascript
const widgetId = turnstile.render("#turnstile-container", {
  sitekey: "<YOUR_SITEKEY>",
  theme: "light",
  size: "normal",
  callback: token => console.log("Token:", token)
});

4) Werken met tokens

javascript
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

markup
<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>

CodevoorbeeldCodevoorbeeld
arrow

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:

javascript
POST
https://challenges.cloudflare.com/turnstile/v0/siteverify

Verzoekparameters:

  • 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

Verificatievoorbeeld in PHPVerificatievoorbeeld in PHP
arrow

Background
Mogelijke fouten en debugging
Bug Icon
Onjuiste parameters
CAPTCHA wordt niet weergegeven of geeft fouten zoals invalid-input-secret, missing-input-response, invalid-input-response. Controleer de geldigheid van sitekey en secret key, evenals de instellingen in het Cloudflare Dashboard.
Bug Icon
Oplossingstimeout
Token is verlopen (geldig voor 300 seconden) of niet op tijd ontvangen. Zorg voor een stabiele verbinding en correcte API-integratie.
Bug Icon
Leeg of onjuist token
Parameter cf-turnstile-response ontbreekt of is onjuist. Controleer de tokenoverdracht naar het formulier en de server.
Bug Icon
Antwoord success=false
Token is ongeldig, verlopen of al gebruikt. Elk token kan slechts één keer worden geverifieerd. Schakel logboekregistratie van Siteverify-verzoeken en -antwoorden in voor analyse.
Controle van de robuustheid
Controleer na de integratie of het systeem de site echt beschermt tegen geautomatiseerde acties.
Aanbevelingen voor veiligheid en optimalisatie
Verifieer tokens alleen op de server, roep nooit de Siteverify API aan vanaf de frontend—dit zal uw geheime sleutel blootstellen.
Gebruik omgevingsvariabelen of een geheimbeheersysteem in plaats van sleutels in de code op te slaan.
Controleer extra velden (<span class="font-bold">hostname</span>, <span class="font-bold">action</span>) om ervoor te zorgen dat het verzoek van uw website komt.
Gebruik HTTPS—alle oproepen naar Siteverify moeten via een beveiligde verbinding worden uitgevoerd.
Implementeer foutafhandeling—wanneer de API niet beschikbaar is, toon de gebruiker een duidelijk bericht zonder interne gegevens te onthullen.
Beperk het gebruik van sitekey per domein.
Voeg links toe naar het <span class="font-bold">Privacybeleid</span> en de <span class="font-bold">Cloudflare Servicevoorwaarden</span> aan het formulier als dit vereist is door uw organisatie of privacybeleid.
Conclusie

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.

Conclusion

Veelgestelde vragen over Cloudflare Turnstile

Om Cloudflare Turnstile op te lossen met CapMonster Cloud:

Stuur een POST-verzoek naar https://api.capmonster.cloud/createTask met de volgende JSON-parameters:

json
{
  "clientKey": "API_KEY",
  "task": {
    "type": "TurnstileTask",
    "websiteURL": "[page_URL_with_Turnstile]",
    "websiteKey": "[Turnstile_website_key]"
  }
}
  • clientKey: Uw CapMonster Cloud API-sleutel
  • task.type: TurnstileTask
  • task.websiteURL: De URL van de pagina waar de captcha wordt opgelost
  • task.websiteKey: Turnstile site key. Zie hoe u deze vindt.

De API retourneert een taskId.

Poll https://api.capmonster.cloud/getTaskResult met clientKey en taskId totdat de antwoordstatus ready wordt.

Wanneer de taak is opgelost, bevat het antwoord een token en de bijbehorende userAgent.

Geef beide waarden door aan dezelfde browsersessie die het formulier zal verzenden.

Zie de Turnstile-taakdocumentatie voor details en voorbeelden.

Cloudflare Turnstile ondersteunt drie widget-modi:

  • Managed: Turnstile beslist op basis van risico of een interactieve controle wordt getoond of de bezoeker stil wordt doorgelaten.
  • Non-interactive: Werkt zonder gebruikersinteractie maar toont nog steeds een zichtbare widget tijdens controles.
  • Invisible: Werkt ook zonder gebruikersinteractie, maar de widget wordt niet aan de bezoeker getoond.

Zodra uw backend het Turnstile-token van de client ontvangt:

Stuur het via POST naar https://challenges.cloudflare.com/turnstile/v0/siteverify met de parameters:

  • secret: De geheime sleutel van uw widget uit het Cloudflare-dashboard
  • response: Het token van de client-side widget
  • remoteip (optioneel): Het IP-adres van de bezoeker
  • idempotency_key (optioneel): Een door u gegenereerde UUID om validatie veilig opnieuw te proberen

Het endpoint accepteert zowel application/x-www-form-urlencoded als application/json.

Als het token de verificatie succesvol heeft doorstaan, retourneert Cloudflare success: true.

Gebruik page.evaluate() of een andere DOM-methode om het token in het veld met [name="cf-turnstile-response"] te injecteren voordat het formulier wordt verzonden.

Houd er rekening mee dat sommige integraties ook callbacks of aangepaste JavaScript-handlers gebruiken. Roep in dat geval de JS-callbackfunctie van de widget aan (gedefinieerd in data-callback) en geef het ontvangen token door aan de serververificatie.

De fout timeout-or-duplicate van Turnstile siteverify betekent meestal dat het token is verlopen vóór verificatie of meer dan eens is ingediend. Turnstile-tokens zijn eenmalig te gebruiken en verlopen na vijf minuten.

Voor foutopsporing:

  • Schakel logging in van verzoeken naar https://challenges.cloudflare.com/turnstile/v0/siteverify
  • Vergelijk de tijd van tokenaanmaak met de verificatietijd.
  • Controleer of uw backend hetzelfde token twee keer verifieert, bijvoorbeeld bij nieuwe pogingen, omleidingen of het afhandelen van dubbele verzoeken.