Što doista štiti obrazac: CAPTCHA, zamka za botove, vremenska zamka, CSRF
Većina kontaktnih obrazaca oslanja se na jedan trik protiv neželjene pošte, a mnogi od tih trikova zaustavljaju samo najjednostavnije botove. Što svaki zaštitni sloj zaustavlja, koliko košta i koja kombinacija ima smisla.
Neželjena pošta putem kontaktnih obrazaca rijetko dolazi od osobe koja ručno tipka. Uglavnom je to softver koji pronalazi obrasce, ispunjava svako polje i šalje rezultat – tisućama puta. Postoji više obrambenih mjera koje djeluju na vrlo različitim mjestima. Razumijevanje stvarne uloge svake od njih pomaže izbjeći dvije pogreške: obrazac bez stvarne zaštite i obrazac toliko strogo zaštićen da stvarni ljudi odustaju.
- Zamka za botove: jednostavni botovi koji ispunjavaju svako polje
- Vremenska zamka: skripte koje predaju odmah nakon učitavanja
- CAPTCHA: većina opće automatizacije
- CSRF token: zahtjevi poslani izravno na krajnju točku
- Ograničenje učestalosti: navale iz jednog izvora
- Dokaz rada: jeftine masovne predaje, bez praćenja ili zagonetki
- Provjere na strani poslužitelja: sve što zaobilazi preglednik
- Ciljani botovi je preskaču; ako je loše skrivena, čitači zaslona je najavljuju
- Botovi koji čekaju; bez potpisa na strani poslužitelja lako ju je krivotvoriti
- Prepreka za sve, prepreke pristupačnosti, često treća strana; postoje usluge rješavanja
- Botovi koji prvo učitaju stranicu također dobivaju valjan token
- Neželjena pošta raspoređena na mnogo IP adresa
- Odlučan pošiljatelj s računalnom snagom; potreban je JavaScript
- Same po sebi ništa – ali bez njih svaki drugi sloj samo je ukras
Zamka za botove i vremenska zamka: nevidljivi filtri
Zamka za botove dodatno je polje koje ljudi nikad ne vide, primjerice polje nazvano „website” skriveno CSS-om. Jednostavni botovi ispunjavaju svako polje pa ispunjena zamka signalizira automatizaciju i poslužitelj može tiho odbaciti poruku. Botovi napisani za Vašu stranicu ili oni koji prikazuju stranicu poput preglednika preskaču je. Pravilno je sakrijte: polje samo pomaknuto izvan zaslona čitači zaslona mogu najaviti, do njega se može doći tipkom Tab ili ga može ispuniti automatsko popunjavanje. Upotrijebite aria-hidden, tabindex -1 i autocomplete off te neutralnu oznaku koja svakoga tko tamo dospije moli da polje ostavi praznim.
Vremenska zamka bilježi kada je obrazac isporučen i odbija predaje koje stižu nevjerojatno brzo. Ljudima treba nekoliko sekundi za čitanje i tipkanje; mnoge skripte šalju u djeliću sekunde. Vremenska oznaka mora se provjeriti na poslužitelju i zaštititi od izmjena, primjerice potpisom ili čuvanjem u sesiji – obično skriveno vremensko polje bot jednostavno prepiše. Prag neka bude nizak jer automatsko popunjavanje ubrzava i stvarne ljude. Botovi koji jednostavno pričekaju prolaze: vremenska zamka je filtar, a ne zid.
CAPTCHA: učinkovita, ali ne bez cijene
CAPTCHA traži dokaz da nije na djelu bot – od slikovnih zagonetki do provjera koje se izvode u pozadini; uobičajene usluge uključuju reCAPTCHA, hCaptcha, Cloudflare Turnstile i Friendly Captcha. Zaustavlja većinu opće automatizacije i zato je toliko popularna. No svaka vidljiva zagonetka prepreka je na kojoj neki posjetitelji odustanu, a većina usluga učitava skriptu treće strane, što otvara pitanja privatnosti i privole. CAPTCHA pomaže i samo ako je ispravno postavljena: javni testni ključ stranice, widget bez skripte ili token koji poslužitelj nikad ne provjerava izgledaju kao zaštita, ali to nisu. Besplatna provjera na formexposed.com izvana upozorava na takve pogreške.
Pristupačnost je dio te cijene. Slikovne zagonetke isključuju slijepe osobe i mnoge slabovidne osobe, zvučne alternative ne pomažu gluhoslijepim osobama, a zahtjevni logički zadaci opterećuju osobe s kognitivnim teškoćama. Kriterij uspješnosti WCAG 2.2 1.1.1 zahtijeva tekstualnu alternativu koja opisuje svrhu CAPTCHA-e i alternativne oblike za različita osjetila. Pozadinske provjere izbjegavaju većinu toga, ali kad nešto postane sumnjivo, zamjensko rješenje često je opet vizualna zagonetka – ispitajte taj put tipkovnicom i čitačem zaslona.
CSRF token: zaštita od krivotvorenja, a ne od neželjene pošte
CSRF token nasumična je vrijednost koju poslužitelj stavlja u obrazac i očekuje natrag. Osmišljen je protiv krivotvorenja zahtjeva među mrežnim stranicama, pri kojem druga mrežna stranica prisili posjetiteljev preglednik da pošalje zahtjev koji posjetitelj nije namjeravao poslati. Na javnom kontaktnom obrascu ima popratni učinak: odbijaju se botovi koji šalju izravno na adresu obrasca bez učitavanja stranice. Svaki bot koji dohvati stranicu i pošalje token natrag prolazi. Većina razvojnih okvira i dodataka za obrasce ionako uključuje CSRF tokene – ostavite ih uključenima, ali nemojte ih računati kao zaštitu od neželjene pošte.
Što se mora dogoditi na poslužitelju
- Ponovno provjerite svako polje na poslužitelju: obvezna polja, duljinu, format e-pošte i odsutnost prijeloma redaka u poljima koja završavaju u zaglavljima pošte.
- Provjerite CAPTCHA tokene i tokene dokaza rada pri svakoj predaji, kod usluge koja ih izdaje ili u vlastitom kodu, i odbijte ponovno upotrijebljene tokene.
- Ograničite predaje po IP adresi i vremenskom razdoblju. To zaustavlja navale iz jednog izvora; neželjena pošta raspoređena na mnogo adresa zahtijeva druge slojeve.
- Razmotrite dokaz rada: prije slanja preglednik rješava mali računalni zadatak. Posjetitelji ne vide zagonetku i ništa se ne prati, ali masovna predaja postaje skupa.
Razumna kombinacija: dva ili tri sloja
- 1Počnite s nevidljivim slojevima: pristupačnom zamkom za botove i potpisanom vremenskom zamkom, obje provjerene na poslužitelju.
- 2Dodajte ograničenje učestalosti po IP adresi kako jedan izvor ne bi mogao zatrpati obrazac.
- 3Ako ciljana neželjena pošta i dalje prolazi, dodajte dokaz rada ili CAPTCHA-u – po mogućnosti bez vidljive zagonetke i s pristupačnom alternativom.
- 4Zadržite CSRF token koji pruža Vaš razvojni okvir – kao dodatak, a ne kao obranu.
- 5Ispitajte rezultat kao posjetitelj – samo tipkovnicom, čitačem zaslona, na telefonu – i provjerite stižu li stvarne poruke i dalje.
Na mnogim stranicama zamka za botove, vremenska zamka i ograničenje učestalosti zajedno već uklanjaju većinu opće neželjene pošte bez vidljive prepreke; CAPTCHA je rezerva kad to nije dovoljno. Na WordPressu besplatni dodatak formexposed kombinira zamku za botove, vremensku provjeru i dokaz rada bez potrebe za Googleom. Da biste vidjeli što Vaš obrazac pokazuje izvana – koji su slojevi prisutni i je li CAPTCHA učinkovito konfigurirana – besplatna provjera na formexposed.com treba samo domenu, bez računa. Ne može vidjeti Vaš poslužiteljski kôd pa dio na strani poslužitelja ostaje Vaš zadatak.