Používejte geniální CAPTCHA techniku

Ú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.

Callo
Callo (neregistrovaný) 88.101.123.---
30. 7. 2009 13:24 Nový

Proč by roboti neuměli používat javascript

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.

Tomáš Neděla
Tomáš Neděla (neregistrovaný) 78.80.22.---
30. 7. 2009 13:47 Nový

Je mi jasné

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.

K
K (neregistrovaný) 217.31.48.---
30. 7. 2009 14:49 Nový

ad 2

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,

Tomáš Neděla
Tomáš Neděla (neregistrovaný) 78.80.22.---
30. 7. 2009 15:18 Nový

ad 3

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.

Callo
Callo (neregistrovaný) 88.101.123.---
30. 7. 2009 16:10 Nový

Nicméně, pro většinu stupdních robotů, kterých je na netu fůra

"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í.

Callo
Callo (neregistrovaný) 88.101.123.---
30. 7. 2009 16:14 Nový

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

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

Lukáš Nevosád
Lukáš Nevosád (neregistrovaný) 85.207.54.---
30. 7. 2009 16:54 Nový

No kdybych chtěl vaši captcha hacknout

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.

Tomáš Neděla
Tomáš Neděla (neregistrovaný) 78.80.22.---
31. 7. 2009 8:30 Nový

ad 7

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í.

pet
pet (neregistrovaný) 82.142.82.---
31. 7. 2009 8:49 Nový

Nejlepší ochranu proti spamu má Seznam ;

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)!!

Marv
Marv (neregistrovaný) 88.102.141.---
31. 7. 2009 9:08 Nový

Ten Váš nápad je učinný jen proto

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.

BFU
BFU (neregistrovaný) 78.136.155.---
1. 8. 2009 13:45 Nový

aco 3d captcha

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

Ladis
Ladis (neregistrovaný) 195.47.18.---
2. 8. 2009 14:34 Nový

Říká kdo?

[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á.

BFU
BFU (neregistrovaný) 78.136.180.---
2. 8. 2009 17:48 Nový

- tma ma byt ozaunik, jako ze otazka

[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?"

es
es (neregistrovaný) 83.91.86.---
3. 8. 2009 15:29 Nový

Táto ochrana spája skôr nevýhody ako výhody viacerých ochrán

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ť.

phi
phi (neregistrovaný) 193.179.236.---
3. 8. 2009 16:17 Nový

no, nevim jak jsou na tom spam-roboti

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

phi
phi (neregistrovaný) 193.179.236.---
3. 8. 2009 16:23 Nový

ad 2) "Teď mě tak napadlo např

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)

es
es (neregistrovaný) 192.251.226.---
3. 8. 2009 16:44 Nový

Nejde o to, že je možné spraviť robota s podporou JavaScriptu

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.

phi
phi (neregistrovaný) 193.179.236.---
3. 8. 2009 17:11 Nový

ad 17)

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)

es
es (neregistrovaný) 95.28.254.---
3. 8. 2009 21:29 Nový

Nejde o dobu prekonania, ale o to, či na to treba použiť ľudský čas

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...

Miroslav Suchý
Miroslav Suchý (neregistrovaný) 62.40.79.---
5. 8. 2009 13:58 Nový

Javascript ja fakt zcestny

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.

Kolik je ...
Kolik je ... (neregistrovaný) 80.63.56.---
5. 8. 2009 14:43 Nový

Otázky typu "Kolik je pet plus dve."

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.

Rardoffette-online
Rardoffette-online (neregistrovaný) 95.132.91.---
27. 1. 2010 5:44 Nový

Diky za zajimavy

Diky za zajimavy blog

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