Inhoud van dit artikel
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
| Modus | Wat de bezoeker ziet |
|---|---|
| Managed (aanbevolen) | Een checkbox, alleen als het risico dat rechtvaardigt |
| Non-interactive | Een widget, maar de bezoeker hoeft niets te doen |
| Invisible | Niets, 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:
- Client. Je plaatst de widget in je formulier met een site key. De widget levert een token op bij de bezoeker.
- 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:
| Laag | Rol |
|---|---|
| Bot-bescherming | Filtert geautomatiseerd verkeer op domeinniveau |
| Rate limiting | Remt hoge volumes per IP |
| Turnstile | Controleert op de formulieren zelf |
| 2FA en wachtwoordbeleid | Beschermt 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.
| Plek | Nut | Opmerking |
|---|---|---|
| Registratie | Hoog | Voorkomt massale nepaccounts |
| Wachtwoordreset | Hoog | Beschermt tegen misbruik van mailverkeer en account-enumeratie |
| Login | Middel tot hoog | Combineer met rate limiting; houd rekening met gebruiksgemak |
| Contactformulier en offerteaanvraag | Hoog | Voorkomt spam en misbruik van je mailserver |
| Nieuwsbriefinschrijving | Hoog | Voorkomt lijstvervuiling |
| Checkout | Voorzichtig | Alleen als je carding ziet; elke wrijving kost conversie |
| Zoeken | Laag | Liever 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:
- De pagina toont de widget en krijgt een token.
- Het formulier stuurt het token mee naar jouw server.
- Jouw server stuurt het token, samen met je geheime sleutel, naar de Cloudflare-verificatie.
- Alleen bij een geslaagde verificatie verwerk je het formulier.
- 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.





