Poslovite se od SPAM-a

Kaj je CAPTCHA in kakšna je njena funkcija?

CAPTCHA (kratica za: Completely Automated Public Turing test to tell Computers and Humans Apart) je varnostni mehanizem, s katerim se strežnik “prepriča”, da spletno stran pregleduje človek in ne internetni robot. Ta varnostna zaščita je dobro poznana predvsem pri spletnih obrazcih in obrazcih za prijavljanje. Osnovni namen CAPTCH-e je postavitev izziva, ki ga mora uporabnik rešiti, da potrdi svojo pristnost.

Spletni obrazci v praksi delujejo tako, da se vizualni del (front-end) prenese uporabniku (HTML + JavaScript), ključni del (back-end) pa teče na strežniku. Postopek izpolnjevanja obrazca se lahko avtomatizira, in sicer tako, da sestavimo svojo aplikacijo, ki bo najprej preverila obliko (zahtevane podatke) spletnega obrazca, podatke pa poslala neposredno na strežnik. Točno to počnejo internetni roboti.

Posledica spletnih robotov so nezaželena sporočila oz. kot jim pogovorno pravimo – “spami”. Da bi takšne “spame” lahko izločili, smo začeli uporabljati CAPTCH-o. Na začetku smo morali prepisovati naključne znake, potem smo izbirali določene slikice. Skripte postajajo vse naprednejše in dogaja se, da tudi CAPTCHA ne more zagotoviti ustrezne varnosti.

Ali je CAPTCHA res nujno potrebna?

Ne, če pristnost uporabnika preverjamo kako drugače (več o tem v nadaljevanju). Da bi poskrbeli za varnost naših spletnih strani, smo pri nas razvili alternativo za obstoječo CAPTCH-o, ki ni le varnejša, ampak tudi uporabniku bolj prijazna, saj ni treba reševati nobenih izzivov. Kot je razvidno iz primera (desna slika), smo se od CAPTCH-e poslovili:


Prej

Potem

Alternative za CAPTCHO

Tukaj bom predstavil nekaj tehnik, ki nam pomagajo pri varnostnem preverjanju.

Metoda “Timestamp”: Eno od polj kontaktnega obrazca naj bo timestamp oz. časovni žig. Ko se obrazec prikaže uporabniku, se v to polje shrani trenutni čas, ki je izražen v sekundah. Še boljše pa je, če timestamp shranimo v drugačnem formatu, saj s tem zavajamo internetne robote. Polje je seveda skrito, zato povprečen uporabnik tega ne bo opazil. Ko se podatki pošljejo strežniku, bo lahko strežnik na podlagi trenutnega časa in timestamp-a izračunal čas reševanja. Uporabnik bo za izpolnitev obrazca potreboval nekaj sekund, internetni robot pa nekaj milisekund. Če omejimo čas reševanja, lahko “spame” uspešno filtriramo in izločimo.

Metoda “Honeypot”: Namesto da preverjamo čas reševanja, lahko nastavimo več skritih polj. Vsako polje ima lahko vnaprej določeno vrednost, lahko pa pustimo prazno. Pomembno je, da se vrednost ohrani med prenosom na strežnik. Zakaj? Uporabnik skritih polj ne bo videl, zato jih tudi ne bo spreminjal. Za internetne robote pa ta polja niso nič drugačna, zato jih bodo poskušali izpolniti. Spremenjena vrednost je znak, da naš kontaktni obrazec ne izpolnjuje človek, ampak robot.

Metoda “Javascript”: Večina kontaktnih obrazcev je izdelanih s pomočjo HTML-ja in uporablja metodo POST. Ta postopek lahko spremenimo, in sicer tako, da uporabimo JavaScript. S pomočjo JS funkcij najprej izluščimo podatke, ki jih je vpisal uporabnik. Prednost je že v tem, da internetni roboti niso sposobni izvajati script (za razliko od spletnih brskalnikov), zato jim lahko tukaj onemogočimo delo. Za “piko na i” pa hkrati s podatki pošljemo še hash izvleček (na primer MD5 vrednost celotnega sporočila), s katerim se lahko prepričamo, da je strežnik prejel res originalno sporočilo, ki ga je poslal uporabnik.

Uporaba kontrolnih polj: Določenim poljem nastavimo še kontrolno polje (torej sta polja v paru). Če uporabljamo skrita polja (glej metodi timestamp in honeypot), uporabimo še dodatno polje, kamor shranimo kontrolno vrednost – ta je lahko enaka originalu ali pa izračunana po neki formuli. Verjetnost, da bi se oba podatka (podatek in kontrolna vrednost) spremenila in še vedno ujemala, je izjemno majhna.

Namesto tega pa lahko na primer uporabnika prosimo, da prvič svoj e-mail vpiše samo z malimi, drugič pa samo z velikimi črkami. Če se vrednosti razlikujeta (male in velike črke), a imata še vedno isti podatek, pomeni, da sporočilo ni bilo avtomatsko generirano.

Cilj te metode je, da imamo na strežniku še dodaten podatek, s katerim lahko preverimo veljavnost oz. pristnost originalnega podatka.

Uporaba potrditvene strani: Ta je za uporabnika sicer nekoliko manj prijazna, saj potrebujemo vmesni korak – potrditveno stran. Na prvi strani uporabnik izpolne kontaktni obrazec, nakar je preusmerjen na drugo (potrditveno) stran, kjer se mu v poljih prikažejo že vpisani podatki – lahko jih samo potrdi, kar dosežemo s HTML-jem. Za razliko od uporabnika pa internetni roboti te podatke lahko spremenijo. Vsaka sprememba pomeni, da obrazec ne izpolnjuje človek, ampak robot.

Metoda z analizo besedila: Tukaj ne uporabljamo nobene posebne varnostne tehnike, ampak se osredotočimo na sporočilo in ga analiziramo: dolžina sporočila, končna ločila, posebni znaki, jezik ipd. Lahko tudi preverjamo ali so v sporočilu URL-ji in e-mail naslovi. Na podlagi zbranih podatkov lahko določimo verjetnost, da je bilo sporočilo avtomatsko generirano (neustrezen jezik, velik delež URL-jev). Ta metoda je nekoliko manj prijazna do lastnika spletne strani, saj se pri kratkih sporočilih (kjer imamo manj podatkov) lahko zgodi, da je analiza netočna in je neko sporočilo napačno ocenjeno.

Avtentikacija v dveh korakih: To je še ena zanesljiva opcija, a po drugi strani za uporabnika manj prijazna. Drugi korak je tukaj posredovanje OTP (one-time password; enkratno geslo) na kontakt, katerega ima samo uporabnik, na primer pošiljanje SMS-a za preverjanje.

Z uporabo omenjenih metod in nekaj domišljije lahko internetne robote zlahka zavedemo in jim preprečimo pošiljanje nezaželenih sporočil.

Poslovite se od SPAM-a
5 (100%) 4 votes

Leave a Reply

Your email address will not be published. Required fields are marked *