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.

  • 30. 7. 2009 13:24

    Callo (neregistrovaný) 88.101.123.---

    Proč by roboti neuměli používat javascript. Např. V8 JavaScript Engine je open-source. Samozřejmě, že kvůli vašemu blogu to implementovat do robota nikdo nebude, ale kvůli gmailu, by si s tím spameři dali jistě tu práci.
    Proto musí google vymýšlet sakra těžké obrázky, které sotva přečte člověk, protože dnešní roboti umí přes OCR leccos rozeznat.

  • 30. 7. 2009 13:47

    Tomáš Neděla (neregistrovaný) 78.80.22.---

    Je mi jasné, že někteři roboti by teoreticky mohli používat javascript. Teď mě tak napadlo např. vzít a využít open source kód Firefoxu a přestavět ho na robota. Nicméně, pro většinu stupdních robotů, kterých je na netu fůra, tato technika plně postačuje pro většinu projektů. Pokud se zjistí, že roboti této funkčnosti dosáhli ve velkém měřítku, tak se zabezpečení bude měnit. Ale takhle je to vlastně se všemi bezpečnostními prvky, nebo ne?

    Napadla mě možná další věc, jak udělat zabezpečení. (jen nápad, do detailu teď nemyslím)
    A sice tak, že by se místo standardního tlačítka zobrazil obrázek (dostatečně veliký) a na něm by se náhodně zobrazovalo jediné místo (řekněme kolečko o xy souřadnicích a nějakém poloměru), na které by se kliklo a tím by se (podle x-sové a y-psylonové souřadnice kliknutí, které se zasílá v požadavku) zjistilo, že daný uživatel není robot.

  • 30. 7. 2009 14:49

    K (neregistrovaný) 217.31.48.---

    ad 2. Vas druhy napad by byl resitelny nejspise javascriptem, takze opet narazite na to, zda ho roboti umi. Jinak vse se da obejit, jde jen o to, jestli se to spamerum vyplati. Navic dle me poradna spam ochrana nevyzaduje akci uzivatele, coz je v dnesni dobe trochu problem, prestoze toto lze javascriptem resit. Je vsak mylne vychazet z toho, ze spambot neumi JS,

  • 30. 7. 2009 15:18

    Tomáš Neděla (neregistrovaný) 78.80.22.---

    ad 3. Nechtěl jsem to řešit javascriptem. Prohlížeč normálně posílá souřadnice kliknutí na obrázek, pokud je . (v GETu jako name_x a name_y) Tím bych teoreticky zjistil, kde uživatel klikl a mohl bych to prověřit.

  • 30. 7. 2009 16:10

    Callo (neregistrovaný) 88.101.123.---

    "Nicméně, pro většinu stupdních robotů, kterých je na netu fůra, tato technika plně postačuje pro většinu projektů."
    Ale přitom to ukazujete na captche googlu. A na něj stupidní roboti nejdou.
    K tomu druhému nápadu: kolik těch obrázků byste potom musel generovat? 10, 100, 1 000 000 ... protože i jednou za 100 pokusů se to robotovi stále vyplatí.

  • 30. 7. 2009 16:14

    Callo (neregistrovaný) 88.101.123.---

    Jo a spameři dohnali Google až k tomuto http://www.maxiorel.cz/chcete-gmail-potrebujete-mobil

  • 30. 7. 2009 16:54

    Lukáš Nevosád (neregistrovaný) 85.207.54.---

    No kdybych chtěl vaši captcha hacknout, tak tím ajaxem mi asi tak tisíckrát usnadníte práci. Místo optimalizování nějakého OCRka bych prostě udělal jeden request navíc. Tudy cesta opravdu nevede.

  • 31. 7. 2009 8:30

    Tomáš Neděla (neregistrovaný) 78.80.22.---

    ad 7. No, máš pravdu v tom, že kdyby se chtěl někdo opravdu hacknout na nějaký náš projekt, tak to asi udělá. Problém je v tom, že když útočník chce, tak většina CAPTCHA se dá hacknout (viz. http://caca.zoy.org/wiki/PWNtcha). To by museli ovšem studovat kód všech stránek a to se jim jaksi moc nevyplatí.

  • 31. 7. 2009 8:49

    pet (neregistrovaný) 82.142.82.---

    Nejlepší ochranu proti spamu má Seznam ;-D Jejich captcha obsahuje znaky s diakritikou, takže je nezadá nikdo, kdo nemá nainstalovanou češtinu (ani Čech ze zahraničního inetcafe)!!

  • 31. 7. 2009 9:08

    Marv (neregistrovaný) 88.102.141.---

    Ten Váš nápad je učinný jen proto, že jej používáte u svých malých projektíků. V okamžiku, kdy by se to více rozšířilo, tak to spameři doprogramují a to tak, že velice snadno.

  • 1. 8. 2009 13:45

    BFU (neregistrovaný) 78.136.155.---

    aco 3d captcha, kterou jsem videl treba tady http://registrace.libimseti.cz/ to je taky snadno prustrelne

  • 2. 8. 2009 14:34

    Ladis (neregistrovaný) 195.47.18.---

    [11] Říká kdo? Teda jestli to máš podložené, myslím že jen kecáš. 3d je dobrý systém, mnohem lepší než na první pohled vypadá.

  • 2. 8. 2009 17:48

    BFU (neregistrovaný) 78.136.180.---

    [12]
    - tma ma byt ozaunik, jako ze otazka
    "a co 3d captcha, kterou jsem videl treba tady http://registrace.libimseti.cz/ to je taky snadno prustrelne?"

  • 3. 8. 2009 15:29

    es (neregistrovaný) 83.91.86.---

    Táto ochrana spája skôr nevýhody ako výhody viacerých ochrán.
    Obrázková ochrana - neustála nutnosť byť pripravený na zmenu obrázka pred univerzálnejšími robotmi.
    JavaScript - veľmi nízka ochrana pred špecializovaným robotom na konkrétny web.
    Asi ide v článku o ochranu pred univerzálnejšími robotmi, v takom prípade je prakticky nepreniknuteľná otázka v češtine, tak aby bolo roboticky obtiažne zistiť odpoveď.
    Napríklad: "Napište poslední tři písmena příjmení správce webu" a pod.
    Ak ide o komfort návštevníkov, tak to môže byť doplnené JavaScriptom, ktorý sa robotom neoplatí implementovať.

  • 3. 8. 2009 16:17

    phi (neregistrovaný) 193.179.236.---

    no, nevim jak jsou na tom spam-roboti, ale v automatickych testech webu se da js dost jednoduse spustit.

  • 3. 8. 2009 16:23

    phi (neregistrovaný) 193.179.236.---

    ad 2) "Teď mě tak napadlo např. vzít a využít open source kód Firefoxu a přestavět ho na robota."
    tak to je zbytecna prace, existuje plugin do Firefoxu, jmenuje se Selenium, ten prave neco takoveho dela, ve firme ho pouzivame jako jeden z testovacich toolu, da se to v pohode ridit javou (a buhvi cim jeste).
    ten napad s js je opravdu dost scestnej, pro nekoho se zkusenostma s automatickym testovanim je to otazka cca pul hodiny az hodiny, nez pripravi robota (za predpokladu, ze uz ma hotovej testovaci framework - coz mit bude)

  • 3. 8. 2009 16:44

    es (neregistrovaný) 192.251.226.---

    Nejde o to, že je možné spraviť robota s podporou JavaScriptu, ale o to, že sa to nevyplatí.
    Miesto jednoduchého analyzátoru textu a obrázkových ochrán, ktoré sú síce zložité, no tie sa analyzovať vyplatí, lebo ich používajú aj vysoko navštevované weby a sú v princípe všade rovnaké, by to bol veľmi ťažkopádny robot.

  • 3. 8. 2009 17:11

    phi (neregistrovaný) 193.179.236.---

    ad 17) ale jo, ja souhlasim, ze ten robot bude mene efektivni nez klasickej blbecek, co jen parsuje html. jen poukazuju na to, ze ten js jsou otevreny vrata (doba prekonani pul az hodina). co se tyce tezkopadnosti, takovehle tooly jsou omezeny jadrem prohlizece, ale porad dokazou prochazet stranky rychlosti 2 az 100 za minutu (typicky kolem 20 stranek/minutu)

  • 3. 8. 2009 21:29

    es (neregistrovaný) 95.28.254.---

    Nejde o dobu prekonania, ale o to, či na to treba použiť ľudský čas.
    Ak áno, tak sa to pre všetky stránky s malou návštevnosťou nevyplatí.
    JavaScript sú otvorené dvere, no nie je problém ich zavrieť, alebo ich spraviť tak zložité, že to bude pre robota neefektívne, napríklad bude treba vykonať výpočet s rozumnne zvoleným priemerným časom výpočtu, alebo nutnosťou stiahnuť všetko tak, ako iný návštervník. Miesto Javascriptu je možné na vyplnenie využiť Javu, Flash...

  • 5. 8. 2009 13:58

    Miroslav Suchý (neregistrovaný) 62.40.79.---

    Javascript ja fakt zcestny. To je zalezitost chvilky takovou vec obejit (take doporucuji Selenium). Nejlepsi captcha je semanticka. Otazky typu:
    Zadejte treti slovo z teto vety.
    Kolik je pet plus dve.
    Kolik cipu ma peticipa hvezda.
    Kolik rohu ma stul.
    Proste debilni otazky na ktere zna kazdy odpoved, ale na ktere je pocitac zatim kratky.

  • 5. 8. 2009 14:43

    Kolik je ... (neregistrovaný) 80.63.56.---

    Otázky typu "Kolik je pet plus dve."
    asi nebudú až tak strojovo ťažko analyzovateľné.
    Stačí rozpoznávať základné číslovky v rôznych jazykoch.

  • 27. 1. 2010 5:44

    Rardoffette-online (neregistrovaný) 95.132.91.---

    Diky za zajimavy blog

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

Podnikatel.cz: Slevu na dani na EET neuplatní každý

Slevu na dani na EET neuplatní každý

DigiZone.cz: Nova opět stahuje „milionáře“

Nova opět stahuje „milionáře“

Vitalia.cz: Tohle jsou nejlepší česká piva podle odborníků

Tohle jsou nejlepší česká piva podle odborníků

Lupa.cz: Patička e-mailu závazná jako vlastnoruční podpis?

Patička e-mailu závazná jako vlastnoruční podpis?

Podnikatel.cz: Takhle se prodávají mražené potraviny

Takhle se prodávají mražené potraviny

Podnikatel.cz: Babišovy firmy a registr smluv. Co odhalil?

Babišovy firmy a registr smluv. Co odhalil?

120na80.cz: Co je padesátkrát sladší než cukr?

Co je padesátkrát sladší než cukr?

Vitalia.cz: Test dětských svačinek: Tyhle ne!

Test dětských svačinek: Tyhle ne!

Vitalia.cz: Muž, který miluje příliš. Ženám neimponuje

Muž, který miluje příliš. Ženám neimponuje

Měšec.cz: TEST: Vyzkoušeli jsme pražské taxikáře

TEST: Vyzkoušeli jsme pražské taxikáře

Podnikatel.cz: EET pro e-shopy? Postavené na hlavu

EET pro e-shopy? Postavené na hlavu

DigiZone.cz: Nejnovější špičkové TV ve videu

Nejnovější špičkové TV ve videu

Podnikatel.cz: Babišovi se nedá věřit, stěžovali si hospodští

Babišovi se nedá věřit, stěžovali si hospodští

DigiZone.cz: Digi2GO: výborný základ, ale...

Digi2GO: výborný základ, ale...

Vitalia.cz: Když bílkoviny, tak jíme ty nekvalitní

Když bílkoviny, tak jíme ty nekvalitní

120na80.cz: Zázrak ze smetiště: co léčí lopuch?

Zázrak ze smetiště: co léčí lopuch?

120na80.cz: Na různou rýmu různá homeopatie

Na různou rýmu různá homeopatie

DigiZone.cz: Pure má tři nové přijímače DAB

Pure má tři nové přijímače DAB

Lupa.cz: Jak se prodává firma za miliardu?

Jak se prodává firma za miliardu?

DigiZone.cz: Parlamentní listy: kde končí PR...

Parlamentní listy: kde končí PR...