AJAX-CAPTCHA
February 5, 2007 – 10:19 amAko ste ikad ostavljali komentar na nečijem blogu ili koristili neki od Web2.0 servisa vjerojatno ste naišli na CAPTCHA, zgodan trik za razlikovanje ljudi od spambotova. Najčešće je implementiran u obliku slike nekih slova i brojeva, dovoljno zamuljanih da ih OCR ne može prepoznati, koje treba identificirati da bi dokazali da ste ljudsko biće. Osim što su očiti problem za ljude sa slabijim vidom, zbog nastojanja da onemoguće sve bolji OCR softver, ponekad su slova tako zamuljana da je i ljudima sa dobrim vidom poprilično teško uočiti što je pisac tu htio reći. Za rješavanje takvih problema ponekad se koristi audio captcha (morate čuti što je rečeno i utipkati to), a mali broj sajtova koristi i JavaScript implementacije (JAPTCHA) koje obično uspoređuju korisnikov upit sa nekim hidden poljem. Problem ovoga je da je poprilično lako vidjeti koji je točan rezultat, ili krivotvoriti očekivani odgovor i tako izbjeći zaštitu, čak i bez korištenja JavaScripta.
No, vjerujem (a i neobavezno googlanje govori tome u prilog) da spambotovi obično nemaju full javascript implementaciju, jer im je to neefikasno i prekomplicirano, bar zasad. Zbog toga je trenutno CAPTCHA koja otkriva prisutnost radećeg JavaScripta u browseru jednako učinkovita kao i CAPTCHA koja otkriva prisutnost čovjeka. Ideja je dati posjetitelju zadatak koji može riješiti samo pomoću JavaScripta (funkciju koju treba izvršiti) a čiji se ishod može predvidjeti na strani servera, te tražiti da posjetitelj vrati rezultat serveru.
Scenarij korištenja:
- Posjetitelj dolazi na stranicu i dobija (X)HTML kôd stranice
- JS sa stranice radi asinkroni zahtjev na neki URL na serveru za “zadatak”
- Server vraća “zadatak” u obliku teksta JS funkcije (JSON, ali sa kôdom a ne podacima
- Browser izvršava funkciju, kao rezultat dobiva jedan broj koji upisuje u sakriveno polje forme
- Nakon što je forma ispunjena i rezultat poslan, server uspoređuje sa očekivanim rezultatom
Očita prednost ovakve implementacije je da je potpuno nevidljiva posjetitelju, odnosno on ne mora razmišljati o tome (i naprezati oči ako slabije vidi), a nedostatak je zahtjevanje uključenog JavaScripta (čuo sam negdje da je netko rekao da je netko to isključio, jednom). No, tehnika se može kombinirati sa standardnim grafičkim CAPTCHA-om (po defaultu se vidi slika i zahtjev za identifikaciju što je na slici, ali JS kôd to sakriva u točki 2. gore), čime se dobiva i pouzdana detekcija ima li korisnik uključen JS ili nema.
Mane su relativna jednostavnost zaobilaženja - inventivni spamer sa firefoxom bi mogao složiti greasemonkey skriptu koja izvršava JS, ali bi osim truda implementacije to bilo i mnogo sporije (JS nije baš najbrži jezik za svijetu, pa ako trebate par milijuna puta izvršiti neku funkciju da zaspamate nekog, to se zbroji), pa vjerujem da bi sve dok relativno mali broj ljudi koristi ovu tehniku spameri njihove stranice samo otpisali kao gubitak, i ne trudili se. Dakle, ljudi, ako vam se ideja sviđa, nemojte je koristiti! ;-))


5 Responses to “AJAX-CAPTCHA”
Još jedno zanimljivo rješenje se može naći ovdje. A ima i dobrih ideja u komentarima.
By Berislav Lopac on Feb 5, 2007
Zanimljiva tematika. Meni se na Klopa.hr sajtu počelo registrirat masa botova pa sam morao staviti neku zaštitu. Razmišljao sam o nekim gotovim library-ima ali onda sam skuzio da mi treba 10 minuta da napišem neku svoju implementaciju koja koristi session (zapisuje pribrojnike i rezultat u session kod prikaza forme, a validator uspoređuje korisnikov unos sa rezultatom u sessionu). Opričano rješenje se nalazi na http://klopa.hr/registration.do
By bigor on Feb 5, 2007
ono sa pribrojnicima je, da se tako izrazim, toliko glupo rijesenje da trenutno radi.
naime vrlo se lako moze napraviti da se procitaju pribrojnici i onda da se upise rezultat. zbog toga nema botova koji su napravljeni za ovakav tip zastite, ali kad bi neko htio to bi vrlo brzo napravio.
da si stavio pribtojniku u slici a ne u tekstualnom obliku onda bi to čak imalo smisla.
ali dobro, glavno da radi. ali ako se nekome zamjeris morat ces to mijenjati.
poz
By mimar on Sep 18, 2008
@mimar, @bigor: da, ovo rješenje je ok dok se nekom spammeru osobno site ne “zamjeri” pa napravi bota za tu svrhu.
Općenito, ako je site relativno mali (globalno gledano), vjerojatno se spammerima ne isplati trošiti vrijeme na ovakve jednostavnije metode zaštite, osim ukoliko baš ne gaje neku mržnju prema traženom siteu.
By senko on Sep 18, 2008