Späť na blog
Základy Publikované 19.08.2026 Čítanie na 7 min

Čo formulár skutočne chráni: CAPTCHA, honeypot, časová pasca, CSRF

Väčšina kontaktných formulárov sa proti spamu spolieha na jediný trik a mnohé z týchto trikov zastavia len tie najjednoduchšie boty. Čo jednotlivé ochranné vrstvy zastavia, čo stoja a aká kombinácia dáva zmysel.

Spam cez kontaktné formuláre zriedka pochádza od človeka, ktorý píše ručne. Väčšinou ide o softvér, ktorý nájde formuláre, vyplní všetky polia a výsledok odošle – tisíckrát. Existuje niekoľko obranných mechanizmov a pôsobia na veľmi rozdielnych miestach. Keď viete, čo každý z nich skutočne robí, vyhnete sa dvom chybám: formuláru bez skutočnej ochrany a formuláru stráženému tak prísne, že to skutoční ľudia vzdajú.

Porovnanie ochranných vrstiev
Vrstva a čo zastaví
  • Honeypot: jednoduché boty, ktoré vypĺňajú všetky polia
  • Časová pasca: skripty, ktoré odosielajú okamžite po načítaní
  • CAPTCHA: väčšina generickej automatizácie
  • CSRF token: požiadavky odoslané priamo na koncový bod
  • Obmedzenie frekvencie: záplavy z jedného zdroja
  • Proof-of-work: lacné hromadné odoslania, bez sledovania či hádaniek
  • Kontroly na strane servera: všetko, čo obchádza prehliadač
Čo prehliadne alebo čo stojí
  • Cielené boty ho preskočia; ak je zle skrytý, čítačky obrazovky ho ohlásia
  • Boty, ktoré počkajú; bez podpisu na strane servera sa dá ľahko sfalšovať
  • Prekážka pre všetkých, bariéry prístupnosti, často od tretej strany; existujú služby na jej riešenie
  • Boty, ktoré najprv načítajú stránku, dostanú tiež platný token
  • Spam rozložený na mnoho IP adries
  • Odhodlaný odosielateľ s výpočtovým výkonom; vyžaduje JavaScript
  • Samy osebe nič – ale bez nich je každá iná vrstva len dekorácia
Žiadna jednotlivá vrstva nepokryje všetko. Lacné, neviditeľné vrstvy odfiltrujú väčšinu; náročnejšie sú určené na vytrvalý, cielený spam.

Honeypot a časová pasca: neviditeľné filtre

Honeypot je dodatočné pole, ktoré ľudia nikdy nevidia, napríklad pole s názvom „website“ skryté pomocou CSS. Jednoduché boty vypĺňajú všetky polia, takže vyplnený honeypot signalizuje automatizáciu a server môže správu potichu zahodiť. Boty napísané priamo pre Vašu stránku alebo boty, ktoré stránku vykresľujú ako prehliadač, ho preskočia. Skryte ho správne: pole, ktoré je len posunuté mimo obrazovky, môžu ohlásiť čítačky obrazovky, dá sa naň dostať klávesom Tab alebo ho môže vyplniť automatické dopĺňanie. Použite aria-hidden, tabindex -1 a autocomplete off a navyše neutrálny popisok, ktorý každého, kto sa tam dostane, požiada, aby pole nechal prázdne.

Časová pasca zaznamená, kedy bol formulár doručený, a odmietne odoslania, ktoré prídu neuveriteľne rýchlo. Ľudia potrebujú niekoľko sekúnd na čítanie a písanie; mnohé skripty odosielajú v zlomku sekundy. Časová pečiatka sa musí kontrolovať na serveri a byť chránená pred manipuláciou, napríklad podpísaná alebo uložená v relácii – obyčajné skryté časové pole bot jednoducho prepíše. Hranicu držte nízko, pretože vďaka automatickému dopĺňaniu sú rýchli aj skutoční ľudia. Boty, ktoré jednoducho počkajú, prejdú: časová pasca je filter, nie múr.

CAPTCHA: účinná, ale nie zadarmo

CAPTCHA žiada dôkaz, že nepracuje bot – od obrázkových hádaniek až po kontroly, ktoré bežia na pozadí; medzi bežné služby patria reCAPTCHA, hCaptcha, Cloudflare Turnstile a Friendly Captcha. Zastaví väčšinu generickej automatizácie, a preto je taká obľúbená. Každá viditeľná hádanka je však prekážkou, pri ktorej to niektorí návštevníci vzdajú, a väčšina služieb načítava skript tretej strany, čo vyvoláva otázky ochrany súkromia a súhlasu. CAPTCHA navyše pomáha len vtedy, ak je správne nastavená: verejný testovací kľúč stránky, widget bez skriptu alebo token, ktorý server nikdy neoverí, vyzerá ako ochrana, ale ňou nie je. Bezplatná kontrola na formexposed.com upozorní na takéto chyby zvonku.

Súčasťou tejto ceny je aj prístupnosť. Obrázkové hádanky vylučujú nevidiacich a mnohých slabozrakých ľudí, zvukové alternatívy nepomôžu hluchoslepým a zložité logické úlohy zaťažujú ľudí s kognitívnym postihnutím. Úspešné kritérium WCAG 2.2 1.1.1 vyžaduje textovú alternatívu opisujúcu účel CAPTCHA a alternatívne formy pre rôzne zmysly. Kontroly na pozadí sa väčšine z toho vyhnú, ale keď nadobudnú podozrenie, záložnou možnosťou je často opäť vizuálna hádanka – otestujte túto cestu s klávesnicou a čítačkou obrazovky.

CSRF token: ochrana proti falšovaniu, nie proti spamu

CSRF token je náhodná hodnota, ktorú server vloží do formulára a očakáva ju späť. Bol navrhnutý proti falšovaniu požiadaviek medzi stránkami (cross-site request forgery), pri ktorom iná webová stránka prinúti prehliadač návštevníka odoslať požiadavku, ktorú návštevník nikdy nezamýšľal. Pri verejnom kontaktnom formulári má vedľajší účinok: boty, ktoré posielajú dáta priamo na adresu formulára bez načítania stránky, sú odmietnuté. Každý bot, ktorý stránku načíta a token pošle späť, prejde. Väčšina frameworkov a pluginov formulárov CSRF tokeny aj tak obsahuje – nechajte ich zapnuté, ale nepočítajte s nimi ako s ochranou proti spamu.

Čo sa musí diať na serveri

Kontroly len v prehliadači nechránia nič
Všetko, čo beží len v prehliadači – validácia v JavaScripte, skript kontrolujúci honeypot, token CAPTCHA, ktorý nikto neoverí –, sa preskočí, len čo niekto pošle požiadavku priamo. Každé rozhodnutie o prijatí správy patrí na server.
  • Každé pole znova overte na serveri: povinné polia, dĺžku, formát e-mailu a žiadne zalomenia riadkov v poliach, ktoré skončia v hlavičkách e-mailu.
  • Tokeny CAPTCHA a proof-of-work overujte pri každom odoslaní, u vydávajúcej služby alebo vo vlastnom kóde, a odmietajte opakovane použité tokeny.
  • Obmedzte počet odoslaní na IP adresu a časové okno. To zastaví záplavy z jedného zdroja; spam rozložený na mnoho adries si vyžaduje ďalšie vrstvy.
  • Zvážte proof-of-work: pred odoslaním prehliadač vyrieši malú výpočtovú úlohu. Návštevníci nevidia žiadnu hádanku a nič sa nesleduje, ale hromadné odosielanie sa predraží.

Rozumná kombinácia: dve alebo tri vrstvy

  1. 1Začnite neviditeľnými vrstvami: prístupným honeypotom a podpísanou časovou pascou, obe kontrolované na serveri.
  2. 2Pridajte obmedzenie frekvencie na IP adresu, aby jeden zdroj nemohol formulár zahltiť.
  3. 3Ak cielený spam stále prechádza, pridajte proof-of-work alebo CAPTCHA – najlepšie takú, ktorá nemá viditeľnú hádanku a má prístupnú alternatívu.
  4. 4Ponechajte CSRF token, ktorý poskytuje Váš framework – ako bonus, nie ako obranu.
  5. 5Otestujte výsledok ako návštevník – len s klávesnicou, s čítačkou obrazovky, na mobile – a overte, že skutočné správy stále prichádzajú.

Na mnohých stránkach honeypot, časová pasca a obmedzenie frekvencie spolu odstránia väčšinu generického spamu bez akejkoľvek viditeľnej prekážky; CAPTCHA je rezerva pre prípad, keď to nestačí. Vo WordPresse bezplatný plugin formexposed kombinuje honeypot, časovú kontrolu a proof-of-work bez potreby Googlu. Ak chcete vidieť, čo Váš formulár ukazuje zvonku – ktoré vrstvy sú prítomné, či je CAPTCHA účinne nakonfigurovaná –, bezplatnej kontrole na formexposed.com stačí doména, žiadny účet. Kód Vášho servera však nevidí, takže serverová časť zostáva Vašou úlohou.