Hlavní navigace

Používejte geniální CAPTCHA techniku

16. 4. 2010 11:33 (aktualizováno) | Tomáš Neděla

Útoky spamarů na webové služby nabírá každým dnem na obrátkách. Jejich hlavní premisou, kromě zasílání všemožných mailů a všemožné adresy, je také hledání formulářů na různých stránkách internetu a skrz ně zasílat zprávy, většinou s obsahem odkazu na nákup prášků pro zvyšování potence (každý ví, o jakou tabletu se jedná) a jiných potencionálně nebezpečných věcí, s cílem přilákat k sobě zákazníky.

U emailů je již obrana na vysoké úrovni a každý mailový server podporuje nějaký spamový filtr, který více či méně filtruje nevyžádanou poštu. Ovšem jak zabránit skriptům v odesílání spamových zpráv skrz formuláře na webu? Jistě existuje hodně technik, z nichž nejpoužívanější je právě CAPTCHA.

Co je CAPTCHA

CAPTCHA je jinými slovy bezpečnostní technika před útokem spamerů, kteří se snaží svými naprogramovanými roboty vyhledávat různé formuláře a skrz ně zasílat zprávy. Ochrana před možností odeslat skriptem formulář tkví v nutnosti opsat do políčka formuláře kód či text, který je nejčastěji zobrazen v podobě obrázku, či jednoduché otázky, kterou skript nemůže rozluštit. Tato ochrana je velmi účinná, avšak pro uživatele značně nepříjemná, neboť musí odpovídat na stupidní otázku, nebo opisovat kód z často skoro nečitelného obrázku. Jak je možné takovou CAPTCHu jednoduše vytvořit?

Jednoduchá CAPTCHA

Standardně používám obrázkovou CAPTCHu, tj. vytvořím políčko pro zadání CAPTCHA kódu a v blízkosti něj vytvořím obrázek. Obrázek je generovaný serverem, který má hlavně za úkol uložit si hodnotu kódu do serverové proměnné SESSION. Tato proměnná samozřejmě na veřejném webu vidět není a její hodnota je zobrazena obrázkem, který jaksi spamové skripty přečíst neumějí. Následně při odeslání formuláře zkontroluji na serveru vyplněný kód s hodnotou uloženou v SESSION. Jestliže se shodují, formulář považuji za korektní.

Takto se dá vytvořit jednoduchá CAPTCHA. Ve svých projektech CAPTCHu používám snad u všech formulářů a bylo ji proto nutné trošku vylepšit, aby neustále neotravovala slušné uživatele. Dal jsem si jen takovou otázku, proč by uživatel musel vyplňovat kód, když to za něj může udělat JavaScript?

Qíz

Kdo rozluští tyto captcha kódy, zaslouží si obdiv nás všech :)

Je zkopírována z jedné VELMI používané služby! Denně ji musí luštit stovky uživatelů – paráda.

Řešením je: CAPTCHA + JavaScript = dokonalá CAPTCHA

Použití JavaScriptu je vhodné, neboť ho spamoví roboti samozřejmě neumějí a je pro ně prakticky neviditelný.  Úkol takovéhoto skriptu je ten, že po načtení stránky odešle AJAXem dotaz na server, který mu zpět zašle kód CAPTCHA, který je uložen v serverové proměnné SESSION. Takto získaný kód vloží do políčka pro zadání kódu z obrázku, a tím je prakticky hotovo. Uživatel již nemusí tento kód vyplňovat. Navíc ještě u svých projektů skryju políčko pro zadání kódu a obrázek předreligis.lupa.cz
uživatelem (standardně CSS stylem display:none) a ten prakticky ani nepozná, že zde nějaká ochrana proti spamu existuje. Což je přesně to, oč nám jde: uživatel nemusí vyplňovat námi vytvořenou ochranu před „nechtěnými“ uživateli.

Přidávat nové názory je zakázáno.