Jak ochránit formulář před spamem

Proč jsou formuláře cílem spamu
Každý formulář na vašem webu je potenciálním cílem spamovacích botů. Kontaktní formuláře, formuláře pro komentáře, registrační formuláře a formuláře pro přihlášení k newsletteru jsou neustále napadány automatizovanými skripty, které odesílají nevyžádané zprávy. Spamové zprávy vám nejen zaplňují schránku – mohou také obsahovat škodlivé odkazy, phishingové pokusy nebo dokonce pokusy o SQL injection.
Odhaduje se, že přes 40 % celkového internetového provozu generují boti a značná část z nich je navržena tak, aby přes webové formuláře rozesílala spam. Bez jakékoli ochrany můžete očekávat desítky až stovky spamových zpráv denně, podle popularity vašeho webu. Kromě otravnosti může mít spam i vážné následky – pokud spammeři použijí váš formulář k rozesílání e-mailů, vaše doména může skončit na blacklistu.
reCAPTCHA – ochrana od Googlu
Google reCAPTCHA je nejpopulárnější metoda ochrany před spamem. Existuje ve třech verzích, z nichž každá má své výhody i nevýhody.
reCAPTCHA v2 (zaškrtávací políčko)
Klasické zaškrtávací políčko „Nejsem robot“. Uživatel klikne na políčko a algoritmus Googlu analyzuje pohyby myši, rychlost interakce a další signály, aby určil, zda jde o člověka. Někdy vyžaduje dodatečnou výzvu, například rozpoznání obrázku. Výhody: snadná implementace, spolehlivost. Nevýhody: přidává tření do uživatelského zážitku, může frustrovat uživatele se špatným připojením.
reCAPTCHA v3 (neviditelná)
Běží na pozadí bez interakce uživatele. Na základě chování uživatele na webu přiřadí skóre od 0,0 (pravděpodobně bot) po 1,0 (pravděpodobně člověk). Vy rozhodnete, jaké skóre je přijatelné (obvykle 0,5 a výše). Výhody: nulové tření pro uživatele, průběžné sledování. Nevýhody: může produkovat falešně pozitivní výsledky, vyžaduje ověření skóre na straně serveru, otázky soukromí, protože sleduje chování uživatele.
Turnstile (alternativa od Cloudflare)
Cloudflare Turnstile je alternativou ke Google reCAPTCHA, která se zaměřuje na soukromí. Nepoužívá vizuální výzvy a nesleduje uživatele mimo váš web. Implementace je podobná jako u reCAPTCHA, ale bez sledování ze strany Googlu. Je zdarma pro všechny weby a snadno se integruje.
Technika honeypot
Honeypot je elegantní a zcela neviditelná metoda ochrany před spamovacími boty. Princip je jednoduchý: do formuláře přidáte skryté pole, které je pro lidské uživatele neviditelné, ale pro boty viditelné.
Jak to funguje
Do formuláře přidejte vstupní pole a skryjte jej pomocí CSS (display: none nebo position: absolute se záporným offsetem). Pojmenujte jej tak, aby to znělo legitimně, například „email2“ nebo „website“. Lidští uživatelé toto pole neuvidí a nevyplní jej. Boti však automaticky vyplňují všechna pole ve formuláři. Když váš server obdrží formulář s vyplněným honeypot polem, víte, že jej odeslal bot, a můžete jej ignorovat.
Implementace
Na straně HTML přidejte pole s CSS třídou, která jej skryje. Na serveru zkontrolujte, zda je honeypot pole prázdné. Pokud není – zprávu odmítněte bez chybové hlášky (vraťte stejnou odpověď „děkujeme“, aby bot nepoznal, že byl odhalen). Důležité: nepoužívejte display:none přímo na prvku, protože chytřejší boti to dokážou rozpoznat. Místo toho použijte CSS třídu nebo obalovací div, který pole přesune mimo viditelnou oblast.
Výhody a nevýhody
Výhody: nulové tření pro uživatele, nevyžaduje JavaScript, žádná závislost na třetí straně, snadná implementace. Nevýhody: nechrání před sofistikovanými boty, kteří analyzují CSS, nechrání před ručním spamem (lidé, kteří spam odesílají ručně).
Rate limiting
Rate limiting omezuje počet požadavků, které může uživatel odeslat během daného časového období. Je to účinná ochrana před boty i před zneužívajícími uživateli.
Na úrovni serveru
Nginx má zabudovaný modul pro rate limiting. Počet POST požadavků na váš formulář můžete omezit například na 5 za minutu z jedné IP adresy. Každý požadavek nad limit dostane odpověď HTTP 429 (Too Many Requests). To účinně zastaví boty, kteří odesílají stovky požadavků za sekundu.
Na úrovni aplikace
Většina webových frameworků má middleware pro rate limiting. Laravel má middleware ThrottleRequests, Express.js má balíček express-rate-limit, Django má django-ratelimit. Na úrovni aplikace můžete být přesnější – například omezit počet zpráv na 3 za relaci, ne jen podle IP adresy.
Na úrovni CDN
Cloudflare, AWS WAF a podobné služby umí aplikovat rate limiting ještě předtím, než požadavek vůbec dorazí na váš server. To je nejúčinnější, protože chrání před DDoS útoky i spamovacími boty už na úrovni sítě.
Validace na straně serveru
Nikdy nespoléhejte pouze na frontendovou validaci. Každý seriózní spamovací bot obejde JavaScript a odesílá požadavky přímo na váš serverový endpoint.
Validace e-mailu
Zkontrolujte formát e-mailové adresy, ale ověřte také, zda doména vůbec existuje (kontrola DNS MX záznamu). Odmítejte známé domény dočasných e-mailů (mailinator.com, tempmail.com apod.), protože se často používají pro spam.
Obsah zprávy
Zkontrolujte zprávu na běžné spamové signály: příliš mnoho odkazů (více než 2–3 v kontaktní zprávě je podezřelé), známá spamová slova (casino, lékárna, levně, kup teď), stejný text odeslaný vícekrát, zprávy v jazyce, který na svém webu neočekáváte.
Časový práh
Změřte, kolik času uživatel strávil na stránce před odesláním formuláře. Pokud byl formulář vyplněn za méně než 3 sekundy, jde pravděpodobně o bota. Přidejte do formuláře skrytý timestamp a ověřte jej na serveru. Je to jednoduchá, ale účinná technika.
Akismet a podobné služby
Akismet je antispamová služba vyvinutá společností Automattic (firmou za WordPressem). Analyzuje obsah zprávy, IP adresu, user agent a další signály, aby určila, zda je zpráva spam. Je zdarma pro osobní použití a nabízí dostupné tarify pro komerční weby.
Integrace je jednoduchá: odešlete obsah formuláře do Akismet API a dostanete odpověď, zda je zpráva spam, nebo ne. Akismet zpracuje přes 500 milionů komentářů měsíčně a má extrémně vysokou přesnost (99,9 %).
Mezi alternativní možnosti patří CleanTalk (placené, bez CAPTCHA), OOPSpam (na bázi API, zaměřené na soukromí) a hCaptcha (podobné reCAPTCHA, ale s lepší ochranou soukromí).
Kombinovaný přístup – nejlepší ochrana
Žádná jednotlivá technika není dokonalá. Nejlepší ochrana kombinuje více metod do vrstvené obrany.
- První vrstva – honeypot: Zachytí většinu jednoduchých botů bez tření pro uživatele.
- Druhá vrstva – rate limiting: Zabraňuje hromadnému odesílání a DDoS útokům na formulář.
- Třetí vrstva – reCAPTCHA v3 nebo Turnstile: Pro sofistikovanější boty neviditelná kontrola na pozadí.
- Čtvrtá vrstva – validace na straně serveru: Kontroluje obsah, formát a časový práh.
- Pátá vrstva – Akismet: Poslední linie obrany pro zprávy, které projdou všemi předchozími vrstvami.
Závěr
Ochrana formulářů před spamem je proces, který vyžaduje více vrstev obrany. Začněte honeypot polem a validací na straně serveru jako základem, přidejte rate limiting na úrovni serveru a pro pokročilou ochranu nasaďte reCAPTCHA v3 nebo Cloudflare Turnstile. U webů s velkým objemem spamu poskytne další vrstvu zabezpečení Akismet nebo podobná služba. U BeoHostingu naše hostingové tarify podporují všechny tyto metody ochrany a náš tým podpory vám pomůže s konfigurací serverového rate limitingu i dalších bezpečnostních opatření.
BeoHosting Team
10+ let zkušeností — Specialisté na webhosting a infrastrukturu
- Web Hosting
- WordPress Hosting
- VPS
- Dedicated Serveri
- Domeni
- SSL
- cPanel
- LiteSpeed
- Linux administracija
- DNS
Naposledy aktualizováno: