Zpět na blog
Vývoj Publikováno 27.08.2026 7 min čtení

CAPTCHA tam je – ale nic nechrání

Viditelný widget reCAPTCHA, hCaptcha nebo Turnstile vypovídá jen málo o tom, zda je formulář chráněn. Zde jsou typické chybné konfigurace a jak své formuláře zkontrolovat během několika minut.

Mnoho majitelů webů přidá do kontaktního formuláře CAPTCHA, uvidí, že se objeví malý odznak nebo zaškrtávací políčko, a problém se spamem považuje za vyřešený. Pak odpad přichází dál. Samotná CAPTCHA je často v pořádku – jen není napojena na nic, co by mohlo bota zastavit. Tento článek prochází typické způsoby, jak se reCAPTCHA, hCaptcha a Cloudflare Turnstile stanou pouhou dekorací, a jak své formuláře zkontrolovat.

Kde ochrana skutečně probíhá

Všechny tři služby fungují na stejném principu. Skript v prohlížeči provede své kontroly a předá formuláři token – krátký řetězec, který říká „tento návštěvník prošel“. Token putuje s odesláním formuláře na váš server. Teprve tam padne skutečné rozhodnutí: váš server pošle token spolu s tajným klíčem poskytovateli a dostane zpět odpověď – úspěch nebo neúspěch a u reCAPTCHA v3 také skóre. Pokud některý článek tohoto řetězu chybí, widget stále vypadá zcela normálně, ale bot, který posílá data přímo na obslužný skript formuláře, projde bez překážek.

Řetěz, na kterém CAPTCHA závisí
1Skript se načte
Skript poskytovatele se načte a smí na stránce s formulářem běžet.
2Token je vydán
Prohlížeč obdrží krátkodobý token, který lze použít jen jednou.
3Token je odeslán
Token se odešle na server spolu s poli formuláře.
4Server ověřuje
Váš server ověří token u poskytovatele pomocí tajného klíče.
5Server rozhoduje
Odeslání je odmítnuto, pokud odpověď není kladná (a u v3 skóre není dost vysoké).
Ochrana existuje, jen pokud funguje každý krok – a ty rozhodující probíhají na serveru, mimo dohled.

Testovací klíč, který propustí všechno

Google, hCaptcha a Cloudflare zveřejňují speciální testovací klíče, aby vývojáři mohli spouštět automatizované testy bez řešení hádanek. S odpovídajícím testovacím tajným klíčem ověření vždy uspěje – v tom je celý jejich smysl. Jsou určeny pro lokální a staging prostředí, ale pravidelně přežijí přesun do produkce: vývojář je vloží během vývoje, web se spustí a nikdo je nevymění. reCAPTCHA ve widgetu alespoň zobrazí upozornění, že slouží pouze k testování, ale u neviditelného nastavení se tam málokdo podívá. Pokud jsou aktivní testovací klíč webu i testovací tajný klíč, projde každé odeslání, ať pochází od člověka, nebo od bota; pokud je testovací pouze klíč webu, ověření naopak selže a skutečné zprávy mohou být odmítnuty.

Token, který nikdo nekontroluje

Druhou klasikou je server, který se poskytovatele nikdy nezeptá. Widget běží, token se vytvoří a odešle a obslužný skript formuláře jej pak prostě ignoruje. Typickými zdroji jsou ručně psané formuláře, zkopírované úryvky, které pokrývají jen stranu prohlížeče, a napůl dokončená nastavení pluginů. Blízký příbuzný: server sice volá ověřovací službu, ale kontroluje jen, zda požadavek prošel, nikoli co říká odpověď. Nebo je hranice skóre pro reCAPTCHA v3 nastavena na 0, což přijme každé skóre, které služba může vrátit. Některé obslužné skripty také „selhávají otevřeně“: pokud token chybí nebo ověření selže, zprávu přesto přijmou – a bot token prostě vynechá.

Když se widget nikdy pořádně nenačte

Jiné chybné konfigurace naopak rozbijí stranu prohlížeče. Pokud klíč webu není zaregistrován pro danou doménu – typicky po přesunu ze stagingu do produkce, změně domény nebo nové subdoméně –, poskytovatel odmítne vydávat tokeny a zobrazí chybu ve widgetu nebo v konzoli prohlížeče. Po změně šablony nebo aktualizaci pluginu může kód widgetu na stránce zůstat, zatímco skript, který jej oživuje, zmizel. Stejný účinek může mít nástroj pro souhlas s cookies, pokud zablokuje skript CAPTCHA, dokud návštěvník nesouhlasí. Co se stane dál, závisí na serveru: pokud trvá na platném tokenu, skuteční návštěvníci už nemohou posílat zprávy a ztracených poptávek si nikdo nevšimne; pokud ne, boti volně procházejí.

Dva další případy se snadno přehlédnou. U reCAPTCHA v3 odznak v rohu ukazuje jen to, že je skript načten někde na stránce – možná šablonou nebo jiným pluginem –, zatímco integrace v samotném formulářovém pluginu je vypnutá. A pluginy pro cache mohou uložit stránku spolu s tokenem vloženým v HTML. Tokeny CAPTCHA jsou platné jen několik minut a lze je ověřit jen jednou, takže token z cache u skutečných návštěvníků selže; lákavá „oprava“ v podobě vypnutí kontroly tiše odstraní ochranu.

Zdání versus skutečnost
Co vidíte
  • Widget zobrazuje upozornění „pouze pro účely testování“
  • Odznak v3 je v rohu
  • Widget se vykreslí a vrátí token
  • Spam ustal – ale skutečné poptávky také
Co se může dít
  • Používají se veřejné testovací klíče a každé ověření uspěje
  • Integrace reCAPTCHA ve formulářovém pluginu je vypnutá
  • Server token nikdy neposílá k ověření nebo výsledek ignoruje
  • Klíč webu není zaregistrován pro doménu nebo vypršely tokeny z cache

Krátká samokontrola

  1. 1Otevřete stránku s formulářem v anonymním okně, otevřete vývojářské nástroje prohlížeče a v konzoli vyhledejte chyby ze skriptu CAPTCHA.
  2. 2Ověřte, že se widget skutečně zobrazí – jednou před a jednou po přijetí cookie lišty – a že formulář nelze odeslat, dokud chybí.
  3. 3V administrační konzoli poskytovatele ověřte, že klíč webu uvádí vaši ostrou doménu (včetně variant, jako je www) a že klíče ve formulářovém pluginu nebo v kódu s ním souhlasí – nikoli klíče z dokumentace nebo ze staging prostředí.
  4. 4V nastavení formulářového pluginu se ujistěte, že je integrace CAPTCHA zapnuta pro tento konkrétní formulář; u reCAPTCHA v3 ověřte, že hranice skóre je vyšší než 0.
  5. 5Máte-li přístup ke kódu, najděte ověření na straně serveru a zkontrolujte, že odeslání odmítne, když je odpověď záporná nebo token chybí.
  6. 6Vyřaďte stránku s formulářem z cachování celých stránek nebo zajistěte, aby se token vytvářel v prohlížeči vždy nově.
  7. 7Odešlete skutečnou testovací zprávu a ověřte, že dorazí; kontrolu opakujte po změnách šablony, pluginů nebo nástroje pro souhlas.
Co kontrola zvenčí vidí a co ne
Testovací klíče, kód widgetu bez skriptu, chyby v konzoli a zablokované skripty jsou vidět zvenčí – bezplatná kontrola na formexposed.com hledá právě tyto signály, aniž by cokoli odesílala. Zda váš server token skutečně ověřuje, na stránce vidět není; to se ukáže jen v kódu vašeho serveru nebo při skutečném odeslání.

CAPTCHA je jedna vrstva, ne celá ochrana. V kombinaci s polem honeypot, časovou kontrolou a filtrováním na straně serveru nenechá chybná konfigurace na jednom místě formulář dokořán otevřený. Chcete-li rychle zjistit, jak jsou na tom vaše formuláře, zadejte svou doménu na formexposed.com – report ukáže, zda jsou zvenčí viditelné části vašeho nastavení CAPTCHA v pořádku.