Mikä lomaketta oikeasti suojaa: CAPTCHA, honeypot, aika-ansa, CSRF
Useimmat yhteydenottolomakkeet luottavat roskapostia vastaan yhteen ainoaan keinoon, ja monet näistä keinoista pysäyttävät vain yksinkertaisimmat botit. Mitä kukin suojakerros pysäyttää, mitä se maksaa ja mikä yhdistelmä on järkevä.
Yhteydenottolomakkeiden kautta tuleva roskaposti on harvoin käsin kirjoittavan ihmisen lähettämää. Useimmiten kyse on ohjelmistosta, joka löytää lomakkeita, täyttää jokaisen kentän ja lähettää tuloksen – tuhansia kertoja. Puolustuskeinoja on useita, ja ne toimivat hyvin eri kohdissa. Kun tiedät, mitä kukin niistä todella tekee, vältät kaksi virhettä: lomakkeen, jossa ei ole todellista suojausta, ja lomakkeen, joka on vartioitu niin raskaasti, että oikeat ihmiset luovuttavat.
- Honeypot: yksinkertaiset botit, jotka täyttävät jokaisen kentän
- Aika-ansa: skriptit, jotka lähettävät heti latauksen jälkeen
- CAPTCHA: useimmat yleiset automaatiot
- CSRF-tunniste: suoraan päätepisteeseen lähetetyt pyynnöt
- Nopeusrajoitus: yhdestä lähteestä tulevat tulvat
- Proof-of-work: halvat massalähetykset ilman seurantaa tai tehtäviä
- Palvelinpuolen tarkistukset: kaikki, mikä ohittaa selaimen
- Kohdennetut botit ohittavat sen; huonosti piilotettuna ruudunlukijat lukevat sen ääneen
- Botit, jotka odottavat; ilman palvelinpuolen allekirjoitusta helppo väärentää
- Este kaikille, saavutettavuusesteitä, usein kolmannen osapuolen palvelu; ratkaisupalveluja on olemassa
- Botit, jotka lataavat ensin sivun, saavat myös kelvollisen tunnisteen
- Monille IP-osoitteille hajautettu roskaposti
- Määrätietoinen lähettäjä, jolla on laskentatehoa; vaatii JavaScriptin
- Ei mitään yksinään – mutta ilman niitä kaikki muut kerrokset ovat koristetta
Honeypot ja aika-ansa: näkymättömät suodattimet
Honeypot on ylimääräinen kenttä, jota ihmiset eivät koskaan näe, esimerkiksi CSS:llä piilotettu kenttä nimeltä ”website”. Yksinkertaiset botit täyttävät jokaisen kentän, joten täytetty honeypot viittaa automaatioon, ja palvelin voi hiljaisesti hylätä viestin. Juuri sinun sivustollesi kirjoitetut botit tai sivun selaimen tavoin renderöivät botit ohittavat sen. Piilota kenttä kunnolla: pelkästään näytön ulkopuolelle siirretyn kentän ruudunlukijat voivat lukea ääneen, siihen voi päätyä sarkainnäppäimellä tai automaattinen täyttö voi täyttää sen. Käytä määritteitä aria-hidden, tabindex -1 ja autocomplete off sekä neutraalia nimiötä, joka pyytää kenttään päätyvää jättämään sen tyhjäksi.
Aika-ansa kirjaa, milloin lomake toimitettiin, ja hylkää lähetykset, jotka saapuvat epäuskottavan nopeasti. Ihmiset tarvitsevat muutaman sekunnin lukemiseen ja kirjoittamiseen; monet skriptit lähettävät sekunnin murto-osassa. Aikaleima on tarkistettava palvelimella ja suojattava peukaloinnilta, esimerkiksi allekirjoittamalla se tai säilyttämällä se istunnossa – botti yksinkertaisesti kirjoittaa pelkän piilotetun aikakentän uudelleen. Pidä raja-arvo matalana, sillä automaattinen täyttö tekee oikeistakin ihmisistä nopeita. Botit, jotka vain odottavat, pääsevät läpi: aika-ansa on suodatin, ei muuri.
CAPTCHA: tehokas, mutta ei ilmainen
CAPTCHA pyytää todistetta siitä, ettei asialla ole botti – kuvatehtävistä taustalla suoritettaviin tarkistuksiin; yleisiä palveluja ovat reCAPTCHA, hCaptcha, Cloudflare Turnstile ja Friendly Captcha. Se pysäyttää useimmat yleiset automaatiot, minkä vuoksi se on niin suosittu. Jokainen näkyvä tehtävä on kuitenkin este, johon osa kävijöistä luovuttaa, ja useimmat palvelut lataavat kolmannen osapuolen skriptin, mikä herättää tietosuojaan ja suostumukseen liittyviä kysymyksiä. CAPTCHA auttaa myös vain, jos se on määritetty oikein: julkinen testisivustoavain, widget ilman skriptiään tai tunniste, jota palvelin ei koskaan tarkista, näyttää suojaukselta mutta ei ole sitä. Maksuton tarkistus osoitteessa formexposed.com osoittaa tällaiset virheet ulkopuolelta.
Saavutettavuus on osa tätä hintaa. Kuvatehtävät sulkevat ulos sokeat ja monet heikkonäköiset, äänivaihtoehdot eivät auta kuurosokeita, ja hankalat logiikkatehtävät kuormittavat kognitiivisesti rajoittuneita ihmisiä. WCAG 2.2:n onnistumiskriteeri 1.1.1 edellyttää CAPTCHAn tarkoitusta kuvaavaa tekstivastinetta sekä vaihtoehtoisia muotoja eri aisteille. Taustatarkistukset välttävät suurimman osan tästä, mutta kun ne muuttuvat epäluuloisiksi, varavaihtoehto on usein jälleen visuaalinen tehtävä – testaa tämä polku näppäimistöllä ja ruudunlukijalla.
CSRF-tunniste: suoja väärennöksiltä, ei roskapostilta
CSRF-tunniste on satunnainen arvo, jonka palvelin lisää lomakkeeseen ja odottaa saavansa takaisin. Se suunniteltiin sivustojen välisiä pyyntöväärennöksiä vastaan, joissa toinen verkkosivusto saa kävijän selaimen lähettämään pyynnön, jota kävijä ei koskaan tarkoittanut. Julkisessa yhteydenottolomakkeessa sillä on sivuvaikutus: botit, jotka lähettävät suoraan lomakkeen osoitteeseen lataamatta sivua, hylätään. Jokainen botti, joka hakee sivun ja lähettää tunnisteen takaisin, pääsee läpi. Useimmat sovelluskehykset ja lomakelisäosat sisältävät CSRF-tunnisteet joka tapauksessa – pidä ne käytössä, mutta älä laske niitä roskapostisuojaukseksi.
Mitä palvelimella on tapahduttava
- Validoi jokainen kenttä uudelleen palvelimella: pakolliset kentät, pituus, sähköpostin muoto eikä rivinvaihtoja kentissä, jotka päätyvät sähköpostin otsakkeisiin.
- Tarkista CAPTCHA- ja proof-of-work-tunnisteet jokaisessa lähetyksessä myöntävän palvelun kautta tai omassa koodissasi, ja hylkää uudelleen käytetyt tunnisteet.
- Rajoita lähetyksiä IP-osoitetta ja aikaikkunaa kohden. Se pysäyttää yhdestä lähteestä tulevat tulvat; monille osoitteille hajautettu roskaposti vaatii muita kerroksia.
- Harkitse proof-of-workia: ennen lähettämistä selain ratkaisee pienen laskentatehtävän. Kävijät eivät näe tehtävää eikä mitään seurata, mutta massalähetyksistä tulee kalliita.
Järkevä yhdistelmä: kaksi tai kolme kerrosta
- 1Aloita näkymättömistä kerroksista: saavutettava honeypot ja allekirjoitettu aika-ansa, molemmat tarkistettuina palvelimella.
- 2Lisää IP-osoitekohtainen nopeusrajoitus, jotta yksittäinen lähde ei voi tulvia lomaketta.
- 3Jos kohdennettua roskapostia pääsee edelleen läpi, lisää proof-of-work tai CAPTCHA – mieluiten sellainen, jossa ei ole näkyvää tehtävää ja jossa on saavutettava vaihtoehto.
- 4Pidä sovelluskehyksesi tarjoama CSRF-tunniste – bonuksena, ei puolustuksena.
- 5Testaa lopputulos kävijänä – pelkällä näppäimistöllä, ruudunlukijalla, puhelimella – ja tarkista, että oikeat viestit saapuvat edelleen.
Monilla sivustoilla honeypot, aika-ansa ja nopeusrajoitus poistavat yhdessä jo suurimman osan yleisestä roskapostista ilman näkyvää estettä; CAPTCHA on varalla siltä varalta, ettei se riitä. WordPressissä maksuton formexposed-lisäosa yhdistää honeypotin, aikatarkistuksen ja proof-of-workin ilman Googlea. Jos haluat nähdä, mitä lomakkeesi näyttää ulospäin – mitkä kerrokset ovat käytössä ja onko CAPTCHA määritetty toimivasti – maksuton tarkistus osoitteessa formexposed.com tarvitsee vain verkkotunnuksen, ei tiliä. Se ei näe palvelinkoodiasi, joten palvelinpuolen osuus jää sinun tehtäväksesi.