Captcha - jak znechutit roboty a neodradit uživatele

Technologie Jan Janča

Captcha je Turingův test, který má za úkol rozeznat od sebe roboty a člověka. V dnešní době tento test potkáváme skoro v každé internetové diskuzi, přihlášení a jiných aktivitách, ve kterých se vyskytuje formulář k vyplnění. Otázkou je, zda opravdu splňuje onu požadovanou funkčnost: spamovací roboti na této úloze selžou a běžný lidský uživatel se dostane dál.

Jsou různé způsoby jak tento test provést. Někteří využívají jednoduché textové otázky typu "kolik je pět a jedna", případně "jakou barvu má červená barva" a podobně rafinované otázky. Spoléhají přitom na neschopnost robota vůbec pochopit takové zadání.

Nevýhodou takového řešení je malé množství kombinací. Díky tomu mohou uspět cílenější útoky na webové stránky, kdy útočník odchytí všechny možné obměny otázek a připraví si k nim i příslušné odpovědi.

Využití obrázku

Další používanou metodou jak rozlišit robota od člověka je obrázková captcha. A to ať už se jedná o opsání textu z příslušného obrázku nebo například o výběr všech stejných zvířátek z obrázku. Pro robota je těžší přečíst obrázek a případně z něj získat text, či vybrat správné možnosti.

Druhý příklad může trpět opět nedostatečným počtem možností a s tím spojenými problémy popsanými výše. Dále obrázek musí být dostatečně velký, aby se v něm uživatel zorientoval. Vybírat z obrázku 10 × 10 pixelů, nemusí být vždy snadné. Na druhou stranu, proč by nám captcha měla zabírat polovinu prostoru naší webové aplikace.

Chuck Noris captcha

Obrázek 1: ChuCaptcha                               Zdroj: http://www.lorenzogil.com/.../a-captcha-for-chuck-norris/

Opište text pokud ho poznáte 

Varianta s řetězcem náhodných znaků v obrázku je jednou z nejpopulárnějších metod captchy. Při náhodném generování řetězce získáváme velký počet možností. Cílené útoky popsané výše tedy selhávají. Zadání úkolu je navíc prosté a jednoznačné: opište text z obrázku. Řešení této úlohy však bývá mnohdy obtížnější. Vzhledem ke schopnostem čtecích a rozpoznávacích algoritmů využívajících metody OCR (Optical Character Recognition), je třeba text různě naklánět, jako pozadí obrázku využívat různě flekatá či šrafovaná pozadí, používat vlastní fonty, případně deformované, přeškrtnuté, jinak barevné nebo velké.

Někteří programátoři tak učiní těmito postupy chaptchu pro OCR opravdu nečitelnou, ale v důsledku je velmi podobná různým testům na zrakovou vybavenost uživatelů. Dále velmi vtipně střídají písmena a čísla jako jsou velké O a číslo 0 či číslo 1 a písmeno l. Některé captchy jsou natolik barevné či přeškrtané, že pomalu začínají vypadat jako oblíbený Rorschachův test, aneb co si představujete, když vidíte tuto skvrnu. Přesto je robot rozpozná s velmi velkou pravděpodobností.

Pokud ještě uživateli nabídneme možnost znovunačtení tohoto testu, a zobrazí se mu další z těchto hlavolamů, můžeme si být jisti, že se na stránky jen tak nevrátí.

Úspěšnost rozpoznání captchy robotem

Obrázek 2: Úspěšnost rozpoznání znaků                                 Zdroj: http://blogs.zdnet.com/security/?p=1232

Rozdělená catpcha

Je ještě další možnost jak předejít přečtení obrázku robotem a zachovat jeho čitelnost. A to je rozdělení obrázku na jednotlivé části a jeho znovu-složení pomocí CSS. Rozdělme tedy obrázek na 2 až 3 části a zamíchejme je v html kódu stránky a složme znovu až pro uživatele. Robot tak obdrží pouze jednotlivé části obrázku, z kterých nic nevyčte, protože nejsou úplné. Tento obrázek navíc můžeme podbarvit jako zbytek podkladu stránky, takže bude zapadat do designu. Navíc font i velikost písma budou pro lidského uživatele čitelné, bez zbytečného přeškrtávání, naklánění nebo jiné deformace písma. Captcha také nebude zabírat tolik prostoru na webové stránce, který poté můžeme využít pro další sdělování potřebnějších informací pro uživatele.

Rozdělená captcha

Obrázek 3: Rozdělená captcha

V případě, že uživatel nebude mít z nějakého důvodu povoleno využívání kaskádových stylů, je další variantou jednotlivé části obrázku napsat za sebe a odřádkovat je. Tím vznikne obrázek čitelný pro člověka, nikoliv však pro robota.

Závěrem

Využívání captchy je v dnešní době bohužel nutné zlo, kterým bojujeme proti záškodnickým činnostem spamovacích robotů. Zároveň tak ale znepříjemňujeme uživatelům surfování po webových stránkách a při vyplňování formulářů je nutíme k otravné činnosti a to vyplněním ještě jednoho pole navíc. Proč se tedy nezamyslet a nevyjít uživatelům vstříc alespoň tím, že captcha bude jednoduše čitelná.

Co si dále přečíst