Cloudflare Turnstile: captcha-alternatief voor login, checkout en formulieren

Cloudflare Turnstile als captcha-alternatief voor login, checkout en formulieren: modi, validatie aan de serverkant en privacy voor je webshop.

Coding.nl
6 min leestijd
Inhoud van dit artikel
  1. Wat is Turnstile?
  2. De drie widgetmodi
  3. Waar zet je Turnstile in?
  4. Hoe werkt het technisch?
  5. Per platform
  6. Privacy
  7. Turnstile en je andere lagen
  8. Waar je Turnstile het beste inzet
  9. De validatie aan de serverkant is verplicht
  10. Veelgemaakte fouten
  11. Toegankelijkheid en gebruikerservaring
  12. Hoe past Turnstile bij de rest?

Een captcha met zebrapaden jaagt klanten weg. Geen captcha laat bots vrij spel. Cloudflare Turnstile zit ertussenin: een controle die meestal niets van de bezoeker vraagt, en alleen bij twijfel een klik.

Dit artikel legt uit hoe Turnstile werkt, waar je het in een webshop inzet en waar de meeste implementaties fout gaan: de controle aan de serverkant vergeten. Het is een aanvulling op rate limiting op Cloudflare Pro.

Wat is Turnstile?

Turnstile is een alternatief voor traditionele captcha's. Het draait kleine controles op de achtergrond, zoals proof-of-work en browserchecks, en past de moeilijkheid per verzoek aan. Cloudflare noemt twee eigenschappen die voor een webshop tellen:

  • Het werkt op elke site, ook zonder Cloudflare-CDN. Je hoeft je verkeer niet via de proxy te laten lopen.
  • Het voldoet volgens Cloudflare aan WCAG 2.2 AA.

Cloudflare biedt een gratis variant aan. Controleer de actuele voorwaarden en limieten op de Cloudflare-site voordat je ervan uitgaat.

De drie widgetmodi

ModusWat de bezoeker ziet
Managed (aanbevolen)Een checkbox, alleen als het risico dat rechtvaardigt
Non-interactiveEen widget, maar de bezoeker hoeft niets te doen
InvisibleNiets, de widget is verborgen

Voor een webshop is Managed meestal de beste start. Voor een zoekformulier of nieuwsbrief past Invisible of Non-interactive.

Waar zet je Turnstile in?

Zet het op plekken waar bots schade doen en je klant weinig wrijving verdraagt:

  • Inloggen en registreren. Tegen credential stuffing en nepaccounts.
  • Wachtwoord vergeten. Voorkomt mailbombardement via je formulier.
  • Contact- en offerteformulieren. Minder spam.
  • Nieuwsbriefaanmelding. Voorkomt dat bots je lijst vol zetten.
  • Betaalstap of coupon-invoer. Tegen carding en het raden van kortingscodes. Gebruik hier de minst opdringerige modus.

Op je productpagina's of in de winkelwagen zelf zet je het niet. Daar kost elke extra stap omzet.

Hoe werkt het technisch?

Er zijn twee kanten, en je hebt ze allebei nodig:

  1. Client. Je plaatst de widget in je formulier met een site key. De widget levert een token op bij de bezoeker.
  2. Server. Je stuurt dat token samen met je secret key naar Cloudflare's validatie-endpoint (siteverify). Cloudflare antwoordt of het token geldig is. Pas daarna verwerk je het formulier.

Het meest gemaakte misverstand: de widget tonen is geen beveiliging. Een bot slaat de widget over en post direct naar je endpoint. Zonder validatie op de server doet Turnstile niets. Tokens zijn bovendien bedoeld voor één gebruik. Valideer elk token één keer en wijs een leeg of verlopen token af.

Per platform

Magento. Een formulier-widget voeg je toe in de template. De validatie hoort op de server, bijvoorbeeld in een plugin of observer op het betreffende controller-endpoint. Gebruik je een bestaande extensie, beoordeel die dan zoals elke extensie: wordt hij onderhouden, welke rechten heeft hij? Zie extensies veilig beoordelen. Bij een Hyvä-storefront rendert de widget in je Alpine-componenten; test de checkout.

Laravel. Een validatieregel die het token via een HTTP-call controleert, werkt goed. Zie ook Laravel security checklist.

Shopify. Bij Shopify beheert het platform het storefront en de checkout, en is wat je daarin zelf kunt toevoegen beperkt. Turnstile is vooral zinvol voor formulieren en endpoints die je zelf host, zoals een eigen portaal of koppeling. Zie Shopify security.

Privacy

Cloudflare stelt dat Turnstile alleen verwerkt wat nodig is voor de beveiligingsfunctie, en dat het geen berichten, formulierinvoer of andere pagina-input leest, opslaat of verstuurt. Dat is een toezegging van de leverancier. Neem Turnstile op in je privacyverklaring en leg de verwerking vast. Dit is geen juridisch advies; laat het toetsen als je twijfelt.

Turnstile en je andere lagen

Turnstile vervangt niets, het vult aan:

LaagRol
Bot-beschermingFiltert geautomatiseerd verkeer op domeinniveau
Rate limitingRemt hoge volumes per IP
TurnstileControleert op de formulieren zelf
2FA en wachtwoordbeleidBeschermt het account zelf

Samen heb je een gelaagde verdediging. Zie ook WAF en bots op je webshop.

Waar je Turnstile het beste inzet

Zet een uitdaging waar bots schade doen, niet overal. Elke extra stap kost een echte klant tijd en aandacht.

PlekNutOpmerking
RegistratieHoogVoorkomt massale nepaccounts
WachtwoordresetHoogBeschermt tegen misbruik van mailverkeer en account-enumeratie
LoginMiddel tot hoogCombineer met rate limiting; houd rekening met gebruiksgemak
Contactformulier en offerteaanvraagHoogVoorkomt spam en misbruik van je mailserver
NieuwsbriefinschrijvingHoogVoorkomt lijstvervuiling
CheckoutVoorzichtigAlleen als je carding ziet; elke wrijving kost conversie
ZoekenLaagLiever met rate limiting

Voor de checkout geldt: meet eerst of je een probleem hebt. Een captcha in de betaalflow kan conversie kosten die opweegt tegen de winst.

De validatie aan de serverkant is verplicht

Dit is de plek waar het vaakst iets misgaat. De widget in de browser levert een token op. Dat token zegt niets totdat jouw server het controleert via de verificatie-API van Cloudflare. Zonder die controle is Turnstile decoratie: een bot slaat de widget gewoon over en stuurt het formulier direct in.

De werkwijze, in woorden:

  1. De pagina toont de widget en krijgt een token.
  2. Het formulier stuurt het token mee naar jouw server.
  3. Jouw server stuurt het token, samen met je geheime sleutel, naar de Cloudflare-verificatie.
  4. Alleen bij een geslaagde verificatie verwerk je het formulier.
  5. Bij een fout of timeout weiger je of vraag je het opnieuw. Valt de verificatie uit, kies dan bewust: blokkeren (veiliger) of toelaten (gebruiksvriendelijker). Leg die keuze vast.

Een token is eenmalig en kort geldig. Hergebruik werkt niet, en dat is de bedoeling.

Veelgemaakte fouten

  • De geheime sleutel in de frontend zetten. De secret key hoort alleen op de server. De site key mag openbaar.
  • Alleen client-side controleren. Zie hierboven: dat beschermt niets.
  • Geen foutafhandeling. Een verlopen token geeft een nietszeggende fout. Toon een duidelijke melding en laat de widget opnieuw laden.
  • Uitgeschakelde widgets bij tests vergeten. Gebruik de testsleutels uit de documentatie in je ontwikkelomgeving, niet je productiesleutels.
  • Een caching-laag die formulieren met een token bewaart. Een gecachte pagina met een oud token faalt.

Toegankelijkheid en gebruikerservaring

Een uitdaging die gebruikers niet kunnen oplossen, is een blokkade. Controleer de widget met toetsenbord en schermlezer, en op een trage mobiele verbinding. Kies een modus die zo min mogelijk interactie vraagt waar dat past. Vertel gebruikers, in gewone taal, waarom er een controle is. Heeft een gebruiker echt geen toegang, bied dan een alternatief aan, zoals e-mail of telefoon.

Hoe past Turnstile bij de rest?

Turnstile is één laag. Het werkt het best samen met rate limiting, bot-bescherming op de edge en monitoring op de server. Als een aanvaller echte mensen inhuurt om captcha's op te lossen, helpt geen enkele widget; dan zijn velddetectie en gedragsmonitoring nodig. Meer over de andere lagen: webshop beveiligen tegen bots en webshop security.

Veelgestelde vragen

Is Turnstile gratis?+

Cloudflare biedt een gratis variant. Controleer de actuele voorwaarden en de limieten op hun website.

Moet mijn site achter Cloudflare staan om Turnstile te gebruiken?+

Nee. Turnstile werkt los van het CDN. Je kunt het op elke site inzetten.

Is Turnstile AVG-proof?+

Cloudflare beschrijft beperkte gegevensverwerking en biedt een privacyaddendum. Of het binnen jouw situatie voldoet, beoordeel je zelf of met je jurist.

Waarom blijven bots door mijn formulier komen?+

Waarschijnlijk valideer je het token niet op de server. Een bot hoeft de widget dan niet eens te laden.

Wil je Turnstile laten inbouwen in je shop? Neem contact op.

Ruthger Idema

Geschreven door Ruthger Idema

Eigenaar van Coding.nl. 15+ jaar e-commerce met Magento, Shopify en Laravel, samen met het vaste team in Emmen.

Wil je dit voor jouw shop laten uitzoeken? Plan een half uur

Een half uur via video met de mensen die het werk ook echt doen. Kies hieronder een moment dat jou past.

  • Direct met het vaste team, geen tussenlagen
  • Concrete feedback op je huidige situatie of plannen
  • Eerlijk advies, ook als het antwoord "niet doen" is
  • Indicatie van kosten en tijdlijn
Liever bellen? 0591-239 299
Beschikbaar deze week

Plan een gratis Tech Check

Vrijblijvend jouw uitdagingen bespreken

Of bel direct: 0591-239 299