Captcha: wat het is en hoe je het kunt gebruiken
Vaak zie je bij een formulier een plaatje staan met verwrongen letters en/of cijfers, zoals de voorbeelden
hier onder. Zo'n plaatje heet "captcha".
Om het formulier te kunnen versturen moet je die karakters overtypen in een speciaal daarvoor aanwezig tekstveld. Als je het goed hebt gedaan wordt het formulier verstuurd. Als je fouten hebt gemaakt verschijnt er een ander plaatje en moet je het overdoen, net zolang tot het goed is.
Dit verhaal gaat over het hoe-en-wat van deze plaatjes.
Het probleem
Op internet is er een pest die spam heet. Het zijn die vervelende, ongevraagde e-mail berichten met reclame
voor pillen en poeders, nep-horloges, enzovoort.
Één van de methodes om spam te versturen gaat met behulp van een computer-programma dat het
internet afstruint op zoek naar websites met een of meerdere formulieren. Als het programma een formulier
vindt vult het zelf de velden in met ongewenste reclame-uitingen of andere troep.
De URL van de formulieren wordt onthouden, zodat je binnen de kortste keren helemaal bedolven wordt met
spamberichten. Voor een webmaster is dat niet fijn.
Voor de goede orde:
zelfstandig formulieren op websites invullen.
Als je alleen maar reclame mail krijgt is dat niet leuk. Maar er gebeuren op deze manier veel engere dingen.
Vaak wordt er een hyperlink naar een website getoond. Als je die -bedoeld of onbedoeld- aanklikt, krijg je
inderdaad een website te zien, variërend van een wit scherm via een nagemaakte HTTP 404-fout ('gevraagde
website wordt niet gevonden') tot en met een fraai opgemaakte webpagina. Op de achtergrond wordt er echter
malware op je PC geïnstalleerd en uitgevoerd. Voor je er erg in hebt worden je passwords gestolen en
misbruikt om zaken aan je website te wijzigen.
Zo is het mij gebeurd dat de toegangscodes naar een paar van mijn
webhosts zijn gejat. Binnen de kortste keren werden de JavaScript-bestanden van mijn websites met behulp
van FTP op de server gewijzigd. Er was code toegevoegd die malware ging downloaden en uitvoeren op de PC's
van de bezoekers van mijn websites.
Aan de functionaliteit van de websites was verder niets veranderd. Het viel dus niet op, alleen leken de
sites soms wat trager. De internet security suite die ik draai reageerde niet! Deze website
is overigens nooit geïnfecteerd geraakt.
De bezoekers van een geïnfecteerde site raken op deze manier óók geïnfecteerd zonder dat ze het in de gaten hebben. Hierdoor verspreidt de malware zich snel.
Het probleem zit er in dat computerprogramma's in staat zijn om formulieren op websites in te vullen. De
moraal van dit verhaal is dus:
alleen worden ingevuld en verzonden door mensen.
Voorkom dat computer-programma's je formulieren
invullen en verzenden!
Dit kun je bereiken met behulp van een captcha in je formulieren.
Captcha's
Captcha is een afkorting van "Completely Automated Public Turing-test
to tell Computers and Humans Apart". Vrij vertaald is dat: Geheel automatische
openbare Turing-test om mensen en computers van elkaar te onderscheiden.
In deze definitie vallen meteen een paar dingen op:
- Het proces verloopt geheel automatisch. De computer (de server waar het betreffende formulier op staat) maakt de captcha en verwerkt de respons geheel zelfstandig, zonder dat daar mensen aan te pas komen.
- De manier waarop de test verloopt (het algoritme) is openbaar. Er is niets geheimzinnigs aan.
Het is voor de makers van captcha's mogelijk om octrooi aan te vragen op (delen van) hun specifieke aanpak. Je kunt een 'mooie' captcha dus niet niet zomaar overnemen uit een site om zelf te gebruiken. Regel dat altijd via de producent. - Een Turing-test is bedoeld om mensen van computers te onderscheiden. Bij een Turing-test stelt een mens
vragen aan een "systeem". Uit de gegeven antwoorden moet blijken of het "systeem" een
mens of een computer is.
Bij captcha stelt de computer echter de vraag. Er wordt daarbij vanuit gegaan dat mensen in staat zijn om de vervormde karakters te ontcijferen en het juiste antwoord te geven, terwijl computers dat niet zouden kunnen.
Hoe veilig is het?
Bij een Turing-test stelt een mens de vragen. Bij captcha stelt een computer de vragen. Daarom spreekt
men bij captcha ook wel van een 'omgekeerde Turing-test'. Dat doet al vermoeden dat er iets mis mee is.
Omdat bij captcha de vragen worden gesteld door een computer, is de test bepaald niet waterdicht. Een computer kan nooit slimmer zijn dan de mensen die hem programmeren. Er bestaat -dus- al software die captcha's (zoals bovenaan deze bladzijde) kan ontcijferen en daarmee de beveiliging kan omzeilen. Voor 'gewone' toepassingen geeft captcha een redelijke bescherming tegen het verkeerd gebruik van de formulieren op je site.
Het omzeilen van captcha's is vooral interessant voor mensen die spam versturen en/of malware verspreiden. Deze lieden gebruiken graag diensten zoals Hotmail, gMail, Yahoo!, enzovoort. Het hebben van véél accounts bij dit soort diensten is goud waard voor spammers, omdat ze hun berichten dan kunnen versturen met een betrouwbaar lijkende afzender. Om deze reden presenteren de grote aanbieders van web-mail (maar ook diensten als eBay) een captcha bij het aanmaken van een nieuw account. Maar ook die captcha's worden omzeild.
Het gegeven dat men steeds weer probeert om beveiligingen te omzeilen vind ik een zorgelijke ontwikkeling. Het bedenken van steeds nieuwe beveiligingen maakt eigenlijk dat je steeds achter de feiten aan loopt te rennen. Uiteindelijk levert het weinig op. De spammers en verspreiders van malware gaan gewoon hun gang.
Recente ontwikkelingen zijn onder andere:
- De letters en cijfers worden vervangen door een paar figuurtjes, bijvoorbeeld poppetjes. Je moet dan aangeven welke van die poppetjes een rood mutsje draagt, of iets dergelijks.
- Gebruik van de webcam om (via gezichtsherkenning) te kijken of er wel een persoon achter de PC-zit.
- Gebruik van scanners voor vingerafdrukken, ogen (iris-scan), enz.
Captcha toepassen in je website
Een captcha pas je alleen toe in je eigen website als dat nodig is. Dat wil zeggen: als jij, de webmaster,
merkt dat de formulieren van je site worden misbruikt voor het versturen van spam of anderszins. Captcha's
in je formulieren zetten "om het hebben van captcha's" is teveel van het goede. Captcha's zijn voor
de gebruikers namelijk niet echt prettig; eigenlijk stoort het alleen maar.
Vrijwel altijd wordt een captcha gemaakt aan de server-kant. Er is dus een programma voor nodig dat
draait bij je webhost. Je kunt ook een internet-dienst gebruiken, zoals reCAPTCHA,
van Google. Via een script kun je dan een captcha opvragen als er vanaf je eigen site een formulier wordt opgeroepen.
Dit maakt de bladzijde met het formulier wel wat trager, omdat er op een externe dienst moet worden gewacht.
Je kunt het ook aan de cliënt-kant regelen, dus op de PC van de bezoeker. Je mogelijkheden zijn dan
wel veel beperkter. Het is niet goed mogelijk om heel veel verschillende plaatjes te gebruiken, tenzij je
een groot hostingpakket hebt. Het 'real-time' aanmaken van een captcha-plaatje is dan niet mogelijk.
Toch is het met JavaScript goed mogelijk een captcha-systeem te maken dat ook nog een behoorlijke beveiliging geeft. Zie daarvoor het item Captcha in JavaScript.
Opmerking:
Het is natuurlijk wel zo dat een captcha voor mensen leesbaar moet zijn. Het voorbeeld hiernaast is een schoolvoorbeeld van
hoe het NIET moet!