CAPTCHA yra – bet nieko neapsaugo
Matomas reCAPTCHA, hCaptcha ar Turnstile valdiklis mažai ką pasako apie tai, ar forma apsaugota. Štai tipinės konfigūracijos klaidos ir kaip per kelias minutes patikrinti savo formas.
Daugelis svetainių savininkų prideda CAPTCHA prie savo kontaktinės formos, pamato pasirodžiusį mažą ženklelį ar žymimąjį langelį ir laiko šlamšto problemą išspręsta. Tada šlamštas ir toliau plūsta. Dažnai pati CAPTCHA veikia gerai – ji tiesiog nesujungta su niekuo, kas galėtų sustabdyti robotą. Šiame įraše apžvelgiame tipinius būdus, kaip reCAPTCHA, hCaptcha ir Cloudflare Turnstile tampa dekoracija, ir kaip patikrinti savo formas.
Kur iš tikrųjų vyksta apsauga
Visos trys paslaugos veikia tuo pačiu principu. Naršyklėje esantis scenarijus atlieka savo patikras ir perduoda formai žetoną – trumpą eilutę, kuri sako „šis lankytojas patikrą įveikė“. Žetonas kartu su formos pateikimu keliauja į Jūsų serverį. Tik ten priimamas tikrasis sprendimas: Jūsų serveris siunčia žetoną kartu su slaptuoju raktu paslaugų teikėjui ir gauna atsakymą – sėkmė ar nesėkmė, o reCAPTCHA v3 atveju ir balą. Jei kurios nors šios grandinės grandies trūksta, valdiklis vis tiek atrodo visiškai normaliai, tačiau robotas, kuris siunčia duomenis tiesiai į Jūsų formos apdorojimo programą, praeina be kliūčių.
Bandomasis raktas, kuris praleidžia viską
Google, hCaptcha ir Cloudflare skelbia specialius bandomuosius raktus, kad kūrėjai galėtų vykdyti automatinius testus nespręsdami galvosūkių. Su atitinkamu bandomuoju slaptuoju raktu patikra visada pavyksta – tai ir yra visa jų paskirtis. Jie skirti vietinei ir bandomajai aplinkai, tačiau reguliariai išlieka perkėlus svetainę į produkcinę aplinką: kūrėjas juos įklijuoja kūrimo metu, svetainė paleidžiama, ir niekas jų nepakeičia. reCAPTCHA bent jau valdiklyje rodo pranešimą, kad jis skirtas tik testavimui, tačiau nematomos konfigūracijos atveju beveik niekas nežiūri. Jei veikia ir bandomasis svetainės raktas, ir bandomasis slaptasis raktas, kiekvienas pateikimas praeina, nesvarbu, ar jį siunčia žmogus, ar robotas; jei bandomasis yra tik svetainės raktas, patikra, priešingai, nepavyksta ir tikros žinutės gali būti atmestos.
Žetonas, kurio niekas netikrina
Antroji klasika – serveris, kuris niekada nesikreipia į paslaugų teikėją. Valdiklis veikia, žetonas sukuriamas ir pateikiamas, o tada formos apdorojimo programa jį tiesiog ignoruoja. Tipiniai šaltiniai – ranka parašytos formos, nukopijuoti kodo fragmentai, apimantys tik naršyklės pusę, ir iki galo nesutvarkyti įskiepio nustatymai. Artimas giminaitis: serveris kreipiasi į patikros paslaugą, bet tikrina tik tai, ar užklausa pavyko, o ne tai, ką sako atsakymas. Arba reCAPTCHA v3 balo riba nustatyta į 0, todėl priimamas bet koks balas, kurį gali grąžinti paslauga. Kai kurios apdorojimo programos taip pat „atsidaro sutrikus“: jei žetono nėra arba patikra nepavyksta, jos vis tiek priima žinutę – o robotas žetoną tiesiog praleidžia.
Kai valdiklis iš tikrųjų niekada neįsikelia
Kitos konfigūracijos klaidos, priešingai, sugadina naršyklės pusę. Jei svetainės raktas neužregistruotas domenui – tipiška po perkėlimo iš bandomosios į produkcinę aplinką, domeno pakeitimo ar naujo subdomeno, – paslaugų teikėjas atsisako išduoti žetonus ir valdiklyje ar naršyklės konsolėje rodo klaidą. Po temos pakeitimo ar įskiepio atnaujinimo valdiklio žymėjimas puslapyje gali likti, o jį įgyvendinantis scenarijus – dingti. Slapukų sutikimo įrankis gali turėti tokį patį poveikį, jei jis blokuoja CAPTCHA scenarijų, kol lankytojas sutiks. Kas vyksta toliau, priklauso nuo serverio: jei jis reikalauja galiojančio žetono, tikri lankytojai nebegali siųsti žinučių ir niekas nepastebi prarastų užklausų; jei ne, robotai praeina laisvai.
Dar du atvejus lengva praleisti. reCAPTCHA v3 atveju ženklelis kampe rodo tik tai, kad scenarijus kažkur puslapyje įkeltas – galbūt temos ar kito įskiepio, – o integracija pačiame formų įskiepyje išjungta. Be to, podėlio įskiepiai gali išsaugoti puslapį kartu su į HTML įterptu žetonu. CAPTCHA žetonai galioja tik kelias minutes ir gali būti patikrinti tik vieną kartą, todėl podėlyje išsaugotas žetonas tikriems lankytojams nepavyksta; viliojantis „sprendimas“ išjungti patikrą tyliai pašalina apsaugą.
- Valdiklyje rodomas pranešimas „tik testavimo tikslais“
- Kampe yra v3 ženklelis
- Valdiklis atvaizduojamas ir grąžina žetoną
- Šlamštas liovėsi – bet ir tikros užklausos
- Naudojami vieši bandomieji raktai, ir kiekviena patikra pavyksta
- Formų įskiepio reCAPTCHA integracija išjungta
- Serveris niekada nesiunčia žetono patikrai arba ignoruoja rezultatą
- Svetainės raktas neužregistruotas domenui arba baigėsi podėlyje išsaugotų žetonų galiojimas
Trumpas savitikris
- 1Atidarykite formos puslapį privačiame lange, atidarykite naršyklės kūrėjo įrankius ir konsolėje paieškokite CAPTCHA scenarijaus klaidų.
- 2Patikrinkite, ar valdiklis iš tikrųjų pasirodo – kartą prieš priimant slapukų reklamjuostę ir kartą po to, – ir ar formos negalima išsiųsti, kol jo nėra.
- 3Paslaugų teikėjo administravimo konsolėje patikrinkite, ar prie svetainės rakto nurodytas Jūsų veikiantis domenas (įskaitant variantus, pvz., www) ir ar raktai Jūsų formų įskiepyje ar kode jį atitinka – o ne raktai iš dokumentacijos ar bandomosios aplinkos.
- 4Formų įskiepio nustatymuose įsitikinkite, kad CAPTCHA integracija įjungta būtent šiai formai; reCAPTCHA v3 atveju patikrinkite, ar balo riba didesnė už 0.
- 5Jei turite prieigą prie kodo, suraskite patikrą serveryje ir patikrinkite, ar ji atmeta pateikimą, kai atsakymas neigiamas arba žetono nėra.
- 6Pašalinkite formos puslapį iš viso puslapio podėlio arba užtikrinkite, kad žetonas būtų sukuriamas iš naujo naršyklėje.
- 7Išsiųskite tikrą bandomąją žinutę ir patikrinkite, ar ji ateina; pakartokite patikrą po temos, įskiepių ar sutikimo įrankio pakeitimų.
CAPTCHA yra vienas sluoksnis, o ne visa apsauga. Kartu su honeypot lauku, laiko patikra ir filtravimu serveryje vienos vietos konfigūracijos klaida nepalieka formos visiškai atviros. Jei norite greitai susidaryti vaizdą apie savo formų būklę, įveskite savo domeną formexposed.com – ataskaita parodys, ar iš išorės matomos Jūsų CAPTCHA konfigūracijos dalys yra tvarkingos.