De CAPTCHA. Het moest dé revolutionaire methode worden om spambots tegen te houden. Ongewenste berichten op blogs, vervelende e-mails, automatische registraties op forums, het zou allemaal verleden tijd worden met deze nieuwe techniek.
De opzet is eenvoudig: een computergegenereerde afbeelding toont een letter- of cijfercombinatie, die de gebruiker dan moet invoeren in het daarvoor voorziene veld. Op die manier wordt er geverifieerd of de gebruiker een geautomatiseerde bot is, of een mens. Immers, een bot kan geen afbeeldingen lezen en een mens wel. Althans, dat was de idee erachter.
Onlangs is echter gebleken dat CAPTCHA’s nogal redelijk makkelijk te kraken zijn. Door bots dus. Via een techniek die we Optical Character Recognition noemen kan een bot de letters van een afbeelding uitlezen. Zoals aangetoond door het OCR Research Team zijn zelfs sommige van de meer ingewikkelde CAPTCHA’s makkelijk te kraken. Greg Mori en Jitandra Malik beschrijven in hun artikel “Breaking a Visual CAPTCHA“ hoe dat precies in z’n werk gaat.
Niet alleen is een CAPTCHA dus een achterhaalde en redelijk zwakke techniek, het is bovendien heel gebruikeronvriendelijk. Om te beginnen is het een extra stap in het verzenden van een bericht of het registreren van een account. Een stap die de gebruiker eigenlijk koud laat en vaak als overbodig of zelfs storend ervaart. Hoe vaak heeft u immers al niet de verkeerde code ingevoerd, waarbij u terug moest keren naar de volgende pagina. Tot overmaat van ramp bleken de invoervelden dan nog eens gewist te zijn, waardoor u helemaal van nul moest beginnen. Vervelend is zacht uitgedrukt.
Ten tweede—en dat is minstens zo belangrijk—hebben blinden, kleurenblinden en slechtzienden vaak de grootste moeite om die CAPTCHA te lezen. Voor een blinde surfer is het bijna helemaal onmogelijk—of zijn software moest gebruik maken van OCR, maar het mag duidelijk zijn dat dat de hele idee van een CAPTCHA overbodig maakt. Voor iemand die kleurenblind is, is het vaak vervelend als er bijvoorbeeld met een achtergrond gewerkt wordt waardoor de voorgrond niet meer te onderscheiden is—dus de tekens niet meer leesbaar zijn. Iemand die slechtziend is ten slotte, zal er niet veel aan hebben om de tekstgrootte in zijn browser aan te passen: het gaat om een afbeelding waarvan de afmetingen exact bepaald zijn. Met uitzondering van enkele weinig gebruikte webbrowsers wordt inzoomen op dit beeld dus onmogelijk.
Daarom ben ik dan ook resoluut tegen CAPTCHA’s. Ik heb ze vroeger wel in websites geïmplementeerd, maar ik voelde weldegelijk aan dat het niet om een definitieve oplossing kon gaan. Ik heb de alternatieven onderzocht en vergeleken. Zo is het bijvoorbeeld mogelijk om tekstueel, via een javascript, een boodschap te laten verschijnen die vraagt om een eenvoudige rekensom op te lossen. Het probleem daar is echter van bijna dezelfde orde als bij andere CAPTCHA’s. Er is een extra struikelblok om een actie te ondernemen en een blinde zal de oplossing niet kunnen geven, om de eenvoudige reden dat JavaScript niet automatisch uitgevoerd wordt door de browser die blinde surfers gebruiken.
Ik ben op zoek gegaan naar een andere oplossing. Ik ben vertrokken vanuit de redenering dat je met spambots hetzelfde moet doen, als wat zij met ons doen: je moet ze op hun zwakte pakken. En een van die zwaktes is dat een spambot niet kan nadenken—voorlopig althans nog niet. De oplossing die ik gevonden heb is gebruikervriendelijk en perfect toegankelijk.
Spambots vullen automatisch formuliervelden in. Omdat ze echter vaak niet kunnen weten wat ze waar juist moeten invullen, vullen ze lukraak alle velden in met hun spambericht. Dit met uitzondering van velden met bijvoorbeeld een id “name” of “e-mail”. De idee is dus: als er iets of iemand een veld invult dat een surfer niet kan zien, dan gaat het om een automatisch ingevuld veld. In ons formulier voegen we dus een “nutteloos” veld toe:
<label for="txtURL" class="h">Vul dit veld niet in als u een mens bent. Zo helpt u mee in de strijd tegen spam.</label> <input name="txtURL" type="text" class="h" value="">
In ons stijlblad (CSS) gaan we de velden met bijvoorbeeld klasse “h” verbergen voor de bots. Ik stel voor om een klasse te gebruiken die je niet “hidden” noemt, of waaruit een bot niet kan afleiden dat het om een verborgen veld gaat. Een eenvoudige display: none;
zou het veld voor blinden, maar ook voor sommige slimmere spambots verbergen. Als we echter met positionering werken, iets waar een “blindenbrowser” of spambot geen rekening mee houdt, kunnen we de velden virtueel van het scherm positioneren. Het moet voor een blinde surfer wel duidelijk zijn dat hij het veld niet mag invullen. Hiervoor heb ik gezorgd door tussen de <label>
-tags een juiste omschrijving te zetten. Iets wat je trouwens altijd zou moeten doen als je werkt met formulieren.
.h {position: absolute; top: -9999px; left: -9999px;}
Als we nu bijvoorbeeld via een php-functie controleren of het veld al dan niet ingevuld is, kunnen we gemakkelijk op basis daarvan een foutmelding weergeven of de echte post-actie laten doorgaan.
if ($_POST['txtURL']!="") {
...functie...
}
Ik gebruik deze functie onder andere om het gastenboek van de U&Me website tegen spambots te beschermen en het werkt als geen ander. Ik ga het stap voor stap ook in andere websites implementeren.
Wat ik echter wel nog moet meegeven is dat dit, zoals altijd, geen wonderoplossing is. Voor grote pakketten als Wordpress is het niet zinvol om dit extra veld toe te voegen: spammers leren ook. Ze kunnen gemakkelijk hun spambots zo configureren dat er bij een wordpress installatie maar een bepaald aantal velden ingevuld wordt, bijvoorbeeld. Voor custom made inhoudbeheersystemen (CMS) is het volgens mij echter een ideale oplossing. Help free the world of spam. Spread the word.
Knap gevonden!
Vullen spambots altijd alle velden in? Zoniet, dan is het niet helemaal waterdicht, maar toch al een serieuze drempel. Het mooie eraan vind ik dat de gewone gebruiker er niets van hoeft te merken.
E