Kaj obrazec res ščiti: CAPTCHA, past-polje, časovna past, CSRF
Večina kontaktnih obrazcev se proti neželeni pošti zanaša na en sam trik, veliko teh trikov pa ustavi le najpreprostejše robote. Kaj ustavi posamezen zaščitni sloj, koliko stane in katera kombinacija je smiselna.
Neželena pošta prek kontaktnih obrazcev redko prihaja od osebe, ki tipka ročno. Večinoma gre za programsko opremo, ki najde obrazce, izpolni vsa polja in pošlje rezultat – na tisoče krat. Obstaja več obramb, ki delujejo na zelo različnih točkah. Če veste, kaj posamezna res počne, se izognete dvema napakama: obrazcu brez prave zaščite in obrazcu, ki je tako močno varovan, da pravi ljudje obupajo.
- Past-polje: preprosti roboti, ki izpolnijo vsa polja
- Časovna past: skripte, ki oddajo takoj po nalaganju
- CAPTCHA: večina splošne avtomatizacije
- Žeton CSRF: zahteve, poslane neposredno na končno točko
- Omejitev pogostosti: poplave iz enega vira
- Dokaz dela (proof-of-work): poceni množične oddaje, brez sledenja ali ugank
- Preverjanja na strežniku: vse, kar obide brskalnik
- Ciljani roboti ga preskočijo; če je slabo skrito, ga bralniki zaslona preberejo
- Roboti, ki počakajo; brez podpisa na strežniku jo je lahko ponarediti
- Ovira za vse, ovire pri dostopnosti, pogosto tretja oseba; obstajajo storitve za reševanje
- Roboti, ki najprej naložijo stran, prav tako dobijo veljaven žeton
- Neželena pošta, razpršena po številnih naslovih IP
- Odločen pošiljatelj z računsko močjo; potrebuje JavaScript
- Sama nič – a brez njih je vsak drug sloj le okras
Past-polje in časovna past: nevidna filtra
Past-polje (honeypot) je dodatno polje, ki ga ljudje nikoli ne vidijo, na primer polje z imenom »website«, skrito s CSS. Preprosti roboti izpolnijo vsa polja, zato izpolnjeno past-polje kaže na avtomatizacijo in strežnik lahko sporočilo tiho zavrže. Roboti, napisani za Vaše spletno mesto, ali taki, ki stran upodobijo kot brskalnik, ga preskočijo. Skrijte ga pravilno: polje, ki je le premaknjeno z zaslona, lahko bralniki zaslona preberejo, lahko ga dosežete s tipko Tab ali ga izpolni samodejno izpolnjevanje. Uporabite aria-hidden, tabindex -1 in autocomplete off ter nevtralno oznako, ki vsakogar, ki tja zaide, prosi, naj ga pusti praznega.
Časovna past zabeleži, kdaj je bil obrazec dostavljen, in zavrne oddaje, ki prispejo nemogoče hitro. Ljudje potrebujejo nekaj sekund za branje in tipkanje; veliko skript pošlje v delčku sekunde. Časovni žig je treba preveriti na strežniku in ga zaščititi pred poseganjem, na primer s podpisom ali hrambo v seji – navadno skrito časovno polje robot preprosto prepiše. Prag naj bo nizek, saj samodejno izpolnjevanje tudi prave ljudi naredi hitre. Roboti, ki preprosto počakajo, pridejo skozi: časovna past je filter, ne zid.
CAPTCHA: učinkovita, a ne zastonj
CAPTCHA zahteva dokaz, da ne deluje robot – od slikovnih ugank do preverjanj, ki tečejo v ozadju; pogoste storitve so reCAPTCHA, hCaptcha, Cloudflare Turnstile in Friendly Captcha. Ustavi večino splošne avtomatizacije, zato je tako priljubljena. Vendar je vsaka vidna uganka ovira, pri kateri nekateri obiskovalci obupajo, večina storitev pa naloži skripto tretje osebe, kar odpira vprašanja zasebnosti in privolitve. CAPTCHA pomaga tudi le, če je pravilno nastavljena: javni testni ključ spletnega mesta, gradnik brez skripte ali žeton, ki ga strežnik nikoli ne preveri, je videti kot zaščita, a to ni. Brezplačno preverjanje na formexposed.com take napake opazi od zunaj.
Dostopnost je del te cene. Slikovne uganke izključijo slepe in veliko slabovidnih ljudi, zvočne alternative ne pomagajo gluhoslepim, zapletene logične naloge pa obremenijo ljudi s kognitivnimi okvarami. Merilo uspeha 1.1.1 smernic WCAG 2.2 zahteva besedilno alternativo, ki opisuje namen CAPTCHA, in alternativne oblike za različna čutila. Preverjanja v ozadju se večini tega izognejo, a ko postanejo sumničava, je nadomestna rešitev pogosto spet vizualna uganka – to pot preizkusite s tipkovnico in bralnikom zaslona.
Žeton CSRF: zaščita pred ponarejanjem, ne pred neželeno pošto
Žeton CSRF je naključna vrednost, ki jo strežnik vstavi v obrazec in jo pričakuje nazaj. Zasnovan je bil proti ponarejanju zahtev med spletnimi mesti (cross-site request forgery), pri katerem drugo spletno mesto doseže, da brskalnik obiskovalca pošlje zahtevo, ki je obiskovalec ni nameraval. Pri javnem kontaktnem obrazcu ima stranski učinek: roboti, ki pošiljajo neposredno na naslov obrazca, ne da bi naložili stran, so zavrnjeni. Vsak robot, ki pridobi stran in žeton pošlje nazaj, pride skozi. Večina ogrodij in vtičnikov za obrazce žetone CSRF tako ali tako vključuje – pustite jih vklopljene, vendar jih ne štejte za zaščito pred neželeno pošto.
Kaj se mora zgoditi na strežniku
- Vsako polje znova validirajte na strežniku: obvezna polja, dolžina, oblika e-poštnega naslova in brez prelomov vrstic v poljih, ki končajo v glavah pošte.
- Žetone CAPTCHA in dokaza dela preverite ob vsaki oddaji, pri storitvi, ki jih je izdala, ali v lastni kodi, in zavrnite žetone, ki so uporabljeni večkrat.
- Omejite oddaje na naslov IP in časovno okno. To ustavi poplave iz enega vira; neželena pošta, razpršena po številnih naslovih, potrebuje druge sloje.
- Razmislite o dokazu dela: pred pošiljanjem brskalnik reši majhno računsko nalogo. Obiskovalci ne vidijo uganke in nič se ne sledi, množična oddaja pa postane draga.
Smiselna kombinacija: dva ali trije sloji
- 1Začnite z nevidnimi sloji: dostopno past-polje in podpisana časovna past, oboje preverjeno na strežniku.
- 2Dodajte omejitev pogostosti na naslov IP, da en sam vir ne more preplaviti obrazca.
- 3Če ciljana neželena pošta še vedno prihaja skozi, dodajte dokaz dela ali CAPTCHA – po možnosti tako brez vidne uganke in z dostopno alternativo.
- 4Obdržite žeton CSRF, ki ga zagotavlja Vaše ogrodje – kot dodatek, ne kot obrambo.
- 5Rezultat preizkusite kot obiskovalec – samo s tipkovnico, z bralnikom zaslona, na telefonu – in preverite, ali prava sporočila še prihajajo.
Na številnih spletnih mestih past-polje, časovna past in omejitev pogostosti skupaj že odstranijo večino splošne neželene pošte brez kakršne koli vidne ovire; CAPTCHA je rezerva za primer, ko to ne zadošča. Za WordPress brezplačni vtičnik formexposed združuje past-polje, preverjanje časa in dokaz dela, ne da bi potreboval Google. Če želite videti, kaj Vaš obrazec kaže navzven – kateri sloji so prisotni, ali je CAPTCHA učinkovito nastavljena – brezplačno preverjanje na formexposed.com potrebuje le domeno, brez računa. Kode na Vašem strežniku ne vidi, zato del na strežniku ostaja Vaša naloga.