Captcha's tegen spambots

Captcha's, oftewel Completely Automated Public Turing test to tell Computers and Humans Apart, ken je ongetwijfeld als afbeeldingen waar op een irritante manier tekst in is gezet die je moet overtypen. Dit is om te bewijzen dat je een mens bent en geen machine. Waarom? Om spambots te weren. Het nadeel is dat ontwikkelaars steeds slimmer worden, maar spammers worden dat ook. De eerste captcha's die gewoon wat tekst in een afbeelding stopten zijn ook al lang niet meer effectief, omdat de spambots de tekst kunnen ontcijferen. Ondertussen zijn de afbeeldingen steeds vervormder geworden: tekst loopt kronkelend, er lopen lijnen door de tekst heen, er worden verschillende kleuren gebruikt of de afbeelding zit vol ruis. Het komt ook regelmatig voor dat een captcha zó effectief is, dat zelfs een mens niet meer kan lezen wat er staan. Tijd voor wat nieuws!

Een captcha is dus een test om het verschil tussen mens en computer te vinden. Het hoeft dus niet persé een afbeelding te zijn. Je moet zoeken naar dingen die mensen wel kunnen en computers niet: tekst begrijpen of geluid analyseren, bijvoorbeeld. Geluid analyseren is een optie die waarschijnlijk de komende jaren een goede oplossing is, maar er zit een addertje onder het gras; je captcha moet computers afschrikken, geen mensen. Als jij je test te ingewikkeld of ontoegankelijk gaat maken, dan hebben mensen geen zin of mogelijkheid de test te doorstaan. Usability en Accessibility zijn dus erg belangrijk. Voor geluid heb je een mediaspeler en codecs nodig en ook moet je bezoeker niet doof zijn. Best lastig om dit dus foolproof te implementeren.

Tekst is echter wél een uitkomst. Computers kunnen tekst nog niet (goed) begrijpen, dus hier valt mee te spelen. De meeste mensen kunnen de tekst gewoon lezen en blinden gebruiken vaak een screenreader die de tekst opleest. Een paar simpele mogelijkheden:

  • Laat de gebruiker gewoon een woord van de pagina overtypen. Dit woord kan je gecentreerd en vetgedrukt weergeven. Let er wel op dat je <strong> of <em> tags gebruikt, zodat mensen met tekstbrowsers of screenreaders ook zien dat dat woord een speciale betekenis heeft.
  • De gebruiker moet een sommetje oplossen: 1+1, 2*3, enz. Zeer effectief en tocg ook erg simpel. De uitvoering is ook erg makkelijk.
  • Bij een persoonlijke blog kan je bijvoorbeeld vragen of de bezoeker de naam van de blogger intypt. Dit kan soms voor wat overlast zorgen bij nieuwe bezoekers, omdat die nog niet zo bekend zijn met die alle posts schrijft, maar verder is het ook simpel en effectief, mede omdat het antwoord (of de manier om daarop te komen) niet bij het invoerveld staat. Stel dat spambots in de nabije toekomst wat beter teksten kunnen begrijpen, dan nog blijft deze methode erg effectief.
  • Stel vragen die mensen kunnen oplossen door hun gezond verstand te gebruiken: "Welke kleur heeft gras?" of "Hoeveel wielen heeft een auto?". Pas wel op dat de gebruiker geen lange/ingewikkelde woorden moet invoeren, want dan krijg je misschien problemen met typfouten of mensen met een slechtere taalkennis.

Andere manieren die soms mensen voor spambots kunnen aanzien:

  • Een verborgen veld in de pagina zetten wat de gebruiker niet mag invullen. Gebruikers van niet-grafische browsers hebben hier last van. Ook al zet je er een waarschuwing bij die de bezoeker vertelt dat er niks ingevuld mag worden, er is altijd een kans dat het gebeurt.
  • Een eigen honeypot maken. Je zet verborgen links op de pagina met rel="nofollow" en als die pagina's bezocht worden, dan wordt het IP-adres opgeslagen en vervolgens geblokkeerd. Je hebt hierbij het risico dat mensen die perongeluk die pagina bezoeken geblokkeerd worden, maar ook dat mensen wiens computer deel uitmaakt van een botnet niet meer op je site kunnen komen.

Om het geheel kort samen te vatten: Wees creatief en zoek geen moeilijke oplossingen. Voor de client-siders onder ons is het misschien wat lastig om te doen, omdat je een script moet hebben voor de verwerking, maar het is wel de enige manier om spammers effectief te weren. Ik ben benieuwd of jullie nog meer creatieve oplossingen weten :)