
Een captcha moet één vraag beantwoorden: is dit een mens of een computer? Het lastige is dat de test daarvoor uitgaat van een bepaald soort mens. Iemand die goed ziet, vlot leest, scherp hoort en snel kan klikken. Wie daar niet aan voldoet, wordt door uw formulier als robot behandeld. Een toegankelijke captcha is daarom bijna een tegenstelling. Gelukkig zijn er manieren om spam tegen te houden waarbij de bezoeker niets hoeft te bewijzen. Dit artikel gaat over die keuze: wat er mis is met captcha’s en wat u in plaats daarvan doet.
Waarom captcha’s mensen buitensluiten
Er bestaan veel soorten captcha’s, en elk soort sluit een andere groep uit.
| Soort | Voor wie lastig of onmogelijk |
|---|---|
| Vervormde letters overtypen | Blinde en slechtziende bezoekers, mensen met dyslexie |
| Plaatjes aanklikken (verkeerslichten, zebrapaden) | Blinde en slechtziende bezoekers, mensen met een motorische beperking, wie het concept niet herkent |
| Audio-captcha | Doven en slechthorenden, en ook veel horende mensen door ruis en vervorming |
| Puzzel of schuifje slepen | Toetsenbordgebruikers, mensen met een motorische beperking, screenreadergebruikers |
| Rekensom of vraag | Mensen met dyscalculie of een cognitieve beperking |
Een audio-alternatief naast een visuele captcha klinkt als een oplossing, maar de geluidsfragmenten zijn vaak zo vervormd dat ook mensen met een goed gehoor ze niet verstaan. En wie doofblind is, heeft aan geen van beide iets.
Daar komt bij dat captcha’s moeilijker worden naarmate computers ze beter kunnen oplossen. Moderne software lost veel captcha’s inmiddels goed op, soms beter dan mensen. De test sluit dan vooral nog mensen uit.
Wat WCAG zegt over captcha’s
WCAG verbiedt captcha’s niet, maar stelt wel voorwaarden. Criterium 1.1.1 heeft een aparte bepaling: is er een captcha, dan moet een tekstalternatief beschrijven wat het is, en moet er een alternatieve vorm zijn die een ander zintuig gebruikt. Een visuele captcha alleen is dus niet genoeg.
WCAG 2.2 voegde criterium 3.3.8 toe, “toegankelijke authenticatie”, op niveau AA. Bij inloggen mag u geen cognitieve test vragen, zoals een puzzel oplossen of tekens overtypen, tenzij er een alternatief of hulpmiddel is. Plaatjes van objecten herkennen valt op AA nog onder een uitzondering, op het strengere AAA-niveau niet meer. Hoe dit bij het inloggen uitpakt, leest u in inloggen zonder puzzel.
Het W3C zelf heeft een uitgebreid document over de ontoegankelijkheid van captcha’s, met dezelfde conclusie: elke vorm van een captcha sluit wel iemand uit, dus kies waar mogelijk een methode die de bezoeker niet belast.
Alternatieven die de bezoeker niet merkt
Honeypot
Een honeypot is een extra veld in het formulier dat voor mensen onzichtbaar is. Robots vullen alle velden in, ook dit veld. Is het ingevuld, dan is het spam. Eenvoudig en effectief tegen de meeste geautomatiseerde spam.
<div class="hp-veld" aria-hidden="true">
<label for="website-url">Laat dit veld leeg</label>
<input id="website-url" name="website-url" type="text"
tabindex="-1" autocomplete="off">
</div>
.hp-veld { position: absolute; left: -9999px; }
Let op de details: het veld moet ook voor screenreaders en toetsenbordgebruikers verborgen zijn, anders vullen zij het per ongeluk in. Daarom aria-hidden, tabindex="-1" en een label dat zegt dat het leeg moet blijven, voor het geval het toch wordt gevonden. Veel formulierplugins hebben een honeypot als ingebouwde optie.
Tijdcontrole
Een mens heeft enkele seconden nodig om een formulier in te vullen, een robot een fractie daarvan. Een formulier dat binnen een of twee seconden na het laden wordt verstuurd, is waarschijnlijk spam. Zet die grens niet te hoog, want ook mensen die met automatisch invullen werken, zijn snel.
Spamfilters aan de serverkant
Diensten en plugins die de inhoud van een bericht beoordelen, zoals Akismet of Antispam Bee, kijken naar kenmerken als links, woorden en afzender. De bezoeker merkt er niets van. Twijfelgevallen kunt u in een aparte map laten belanden in plaats van ze te weigeren.
Onzichtbare controles
Er zijn diensten die op de achtergrond het gedrag van de bezoeker beoordelen en alleen bij twijfel een test tonen, zoals reCAPTCHA v3 of Cloudflare Turnstile. Voor de meeste bezoekers is dat onzichtbaar. Twee kanttekeningen: als er toch een test verschijnt, is die niet altijd toegankelijk, en zulke diensten verwerken gegevens van bezoekers. Bekijk of dat past bij uw privacyverklaring en laat u bij twijfel adviseren.
Welke combinatie past bij uw site?
Voor een gewoon contact- of offerteformulier is een honeypot in combinatie met een tijdcontrole meestal voldoende. Komt er dan nog veel spam door, voeg een spamfilter aan de serverkant toe. Een zichtbare captcha is zelden nodig. Meer praktische tips over het tegenhouden van spam vindt u in spam via formulieren stoppen.
Bij inlogformulieren werken andere maatregelen beter, zoals een limiet op het aantal pogingen en tweestapsverificatie. Die maken het voor aanvallers moeilijk zonder dat de gewone bezoeker iets hoeft op te lossen.
Moet er om welke reden dan ook een zichtbare test blijven, kies dan een variant met een echt alternatief, zorg dat hij met het toetsenbord bedienbaar is, en bied een andere manier van contact aan, zoals een telefoonnummer of e-mailadres naast het formulier.
Eerst kijken, dan kiezen
- Loop alle formulieren op uw site langs: contact, nieuwsbrief, account aanmaken, inloggen, reviews, checkout.
- Noteer waar een zichtbare captcha staat en welke soort.
- Probeer elk formulier te versturen met alleen het toetsenbord. Lukt dat?
- Kijk in de instellingen van uw formulierplugin welke onzichtbare beveiliging er beschikbaar is.
- Vervang de zichtbare captcha en houd een paar weken bij of de hoeveelheid spam acceptabel blijft.
Formulieren zijn op veel sites de plek waar klanten contact opnemen of bestellen. Juist daar wilt u niemand buitensluiten. Wat er verder bij een toegankelijk formulier komt kijken, staat op toegankelijke formulieren op uw website, en het complete overzicht op website toegankelijk maken.
Vraag een gratis websitecheck aan. Binnen één werkdag weet u waar uw website staat.
