Proč je váš kontaktní formulář největším spamovým rizikem
Většina kontaktních formulářů je nastavena tak, aby odesílala e-maily přímo z uživatelského vstupu. Tím se jejich zneužití stává triviálním.
Obsah
- Problém je starší, než si myslíte
- Proč jsou kontaktní formuláře tak snadno zneužitelné
- Správný způsob odesílání e-mailů z kontaktního formuláře
- Omezení frekvence není volitelné
- CAPTCHA je kompromis, ne řešení
- Kdy použít službu pro formuláře třetí strany
- Problém DMARC
- A co [souhlas s cookies a sledování formulářů](/cs/blog/2026-05-02-what-changed-for-cookies-in-2026-and-what-to-do-about-it)?
- Klíčové závěry
- FAQ
- Zdroje
Problém je starší, než si myslíte
Kontaktní formuláře jsou vektorem pro spam už od začátku 2000. let, ale problém se zhoršil s tím, jak poskytovatelé e-mailu zpřísnili požadavky na autentizaci. Většina kontaktních formulářů je stále postavena stejně: uživatel vyplní formulář, váš server odešle e-mail s adresou uživatele v hlavičce From a vy čekáte na odpovědi.
To je učebnicová zranitelnost typu e-mail spoofing. Spammeři mohou váš formulář použít k odeslání e-mailu, který vypadá, že pochází z libovolné adresy, kterou si zvolí, a je směrován přes IP adresu vašeho serveru. Pokud tímto způsobem odejde dost spamu, vaše doména bude označena a vaše legitimní transakční e-maily přestanou docházet do doručené pošty.
Oprava je přímočará, ale většina návodů ji stále popisuje špatně.
Proč jsou kontaktní formuláře tak snadno zneužitelné
Typický kontaktní formulář přijímá tři pole: jméno, e-mail a zprávu. Serverový handler vezme tuto e-mailovou adresu a vloží ji přímo do hlavičky From odchozí SMTP zprávy. Je to pohodlné pro odpovědi — ve své schránce stačí kliknout na „odpovědět“ — ale je to také dárek pro spammery.
Tady je, co se stane, když spammer najde váš formulář:
- Odešle formulář s e-mailovou adresou oběti v poli „from“
- Váš server poslušně odešle e-mail s adresou této oběti v hlavičce
From - Poštovní server oběti uvidí e-mail, který tvrdí, že pochází z její domény, ale vznikl na vaší IP adrese
- Pokud vaše doména nemá správné záznamy SPF/DKIM/DMARC (nebo i když je má), e-mail přesto může projít, protože mnoho serverů je k provozu z kontaktních formulářů shovívavých
- Oběť obdrží spam, který vypadá, že pochází z její vlastní adresy, nebo bude vaše doména označena za spoofing
Nejde o teoretický útok. Děje se to neustále. Pokud provozujete kontaktní formulář a nikdy jste nekontrolovali logy svého poštovního serveru, pravděpodobně už jste tímto způsobem zneužíváni.
Správný způsob odesílání e-mailů z kontaktního formuláře
Oprava spočívá v tom, že do hlavičky From nikdy nevložíte uživatelský vstup. Místo toho:
- From:
[email protected](nebo libovolná adresa, kterou ovládáte) - Reply-To: E-mailová adresa odeslaná uživatelem
- Subject: Pokud chcete, zahrňte jméno uživatele, ale nikdy jeho e-mail
- Body: Zahrňte všechna data z formuláře, jasně označená
Tímto způsobem váš server odesílá e-maily pouze z adres, které vlastníte a máte správně autentizované. Když ve schránce kliknete na „odpovědět“, odpověď stále půjde uživateli — přesně k tomu slouží Reply-To. Spammeři ale nemohou váš formulář použít k vydávání se za libovolné adresy.
Většina e-mailových knihoven to podporuje přímo. V PHP PHPMailer:
$mail->setFrom('[email protected]', 'Contact Form');
$mail->addReplyTo($_POST['email'], $_POST['name']);
V Pythonu s smtplib a email.mime:
msg['From'] = '[email protected]'
msg['Reply-To'] = form_data['email']
V Node.js s Nodemailer:
const mailOptions = {
from: '[email protected]',
replyTo: req.body.email,
// ...
};
Pokud váš kontaktní formulář aktuálně vkládá uživatelský vstup do hlavičky From, jde o opravu na jeden řádek. Udělejte ji dnes.
Omezení frekvence není volitelné
I při správné hygieně hlaviček je nechráněný kontaktní formulář stále vektorem pro spam. Spammeři odešlou váš formulář stovkykrát s různým obsahem zprávy a vaše schránka se zaplní odpadem.
Omezení frekvence potřebujete na několika úrovních:
- Na IP: Ne více než 5 odeslání za hodinu ze stejné IP adresy
- Na e-mail: Ne více než 3 odeslání za den ze stejné e-mailové adresy
- Globálně: Ne více než 50 odeslání za hodinu napříč všemi uživateli (upravte podle své návštěvnosti)
Omezení frekvence patří do aplikačního kódu, ne jen do konfigurace webového serveru. Omezení frekvence v Nginx a Apache může pomoci, ale funguje na úrovni požadavků a neví nic o e-mailových adresách ani o vzorcích zneužívání konkrétních formulářů.
Pokud používáte framework, pravděpodobně existuje middleware pro rate limiting, který můžete jednoduše zapojit. Pokud stavíte od nuly, jednoduchý Redis čítač s expiračními klíči funguje dobře:
key = f"contact_form:{ip_address}"
count = redis.incr(key)
if count == 1:
redis.expire(key, 3600) # 1 hour
if count > 5:
return error("Rate limit exceeded")
Není to neprůstřelné — spammeři mohou střídat IP adresy — ale výrazně to zvyšuje náklady na zneužití.
CAPTCHA je kompromis, ne řešení
Google reCAPTCHA v3 je neviditelná a hodnotí uživatele podle chování, což zní ideálně. V praxi blokuje legitimní uživatele častěji, než byste čekali, zejména uživatele na VPN, Toru nebo sdílených firemních sítích.
reCAPTCHA v2 (zaškrtávací políčko „Nejsem robot“) je spolehlivější, ale přidává tření. Honeypotová pole — skrytá formulářová pole, která lidé nevyplní, ale boti ano — zachytí méně sofistikované boty bez dopadu na uživatele, ale pro jakéhokoli vážnějšího spammera jsou triviálně obejitelná.
Nejlepší přístup je vrstvený:
- Správné e-mailové hlavičky (nevyjednatelné)
- Omezení frekvence (nevyjednatelné)
- Honeypotové pole (snadné vítězství bez nevýhod)
- CAPTCHA jen tehdy, pokud po výše uvedeném stále dostáváte významné množství spamu
Pokud CAPTCHA přidáte, použijte reCAPTCHA v3 s nízkým prahem (0,5 nebo méně) a záložní přechod na v2 pro uživatele s nízkým skóre. Tím udržíte tření pro většinu uživatelů nízké a zároveň budete blokovat boty.
Kdy použít službu pro formuláře třetí strany
Pokud provozujete malý web a nechcete udržovat formulářovou infrastrukturu, služby třetích stran jako Formspree, Tally nebo Netlify Forms se o vše postarají za vás. Omezují frekvenci, validují a odesílají e-maily ze svých vlastních domén, takže vaše reputace zůstává čistá.
Kompromisem je, že posíláte uživatelská data třetí straně, což může být v rozporu s vašimi zásadami ochrany soukromí nebo povinnostmi podle GDPR. Zpracování dat na straně klienta je rostoucí trend mezi týmy zaměřenými na soukromí, ale kontaktní formuláře ze své podstaty vyžadují zpracování na serveru — e-mail z prohlížeče bez vystavení přihlašovacích údajů neodešlete.
Pokud zpracováváte citlivé dotazy (právní, zdravotní, finanční), pravděpodobně musíte provozovat vlastní formulářovou infrastrukturu. Pro všechno ostatní je služba třetí strany rozumnou volbou.
Problém DMARC
I když opravíte hlavičky kontaktního formuláře, nejste v bezpečí, pokud vaše doména nemá DMARC politiku. DMARC říká přijímajícím poštovním serverům, co mají dělat s e-mailem, který neprojde kontrolami SPF nebo DKIM. Bez něj mohou spammeři stále posílat e-maily, které vypadají, že pocházejí z vaší domény, i když nepoužívají vaše servery.
Nastavení DMARC je mimo rozsah tohoto článku, ale pokud to s reputací e-mailu myslíte vážně, je nevyjednatelné. Začněte politikou pouze pro monitoring (p=none) a postupně přejděte na p=quarantine nebo p=reject, jakmile ověříte, že vaše legitimní e-maily jsou správně autentizované.
A co souhlas s cookies a sledování formulářů?
Pokud váš kontaktní formulář používá analytiku nebo marketingové pixely ke sledování odeslání, pravděpodobně se na vás vztahují pravidla GDPR a ePrivacy. Většina kontaktních formulářů sledování nepotřebuje — už víte, že někdo formulář odeslal, protože jste obdrželi e-mail — ale pokud používáte něco jako Facebook Pixel nebo události Google Analytics, potřebujete před načtením těchto skriptů výslovný souhlas.
Nejjednodušší přístup je odeslání kontaktního formuláře vůbec nesledovat. Pokud je sledovat musíte, načítejte sledovací skripty až poté, co uživatel udělí souhlas, a ujistěte se, že váš banner se souhlasem je v souladu s pravidly.
Klíčové závěry
- Nikdy nevkládejte e-mailové adresy odeslané uživatelem do hlavičky
From. Místo toho použijteReply-To. - Omezení frekvence je povinné. Implementujte ho na úrovni aplikace, ne jen webového serveru.
- Honeypotová pole jsou bezplatné vítězství. CAPTCHA by měla být až poslední možností.
- Formulářové služby třetích stran jsou rozumnou volbou pro malé weby, ale přinášejí kompromisy v oblasti soukromí.
- Pokud ze své domény odesíláte jakýkoli e-mail, potřebujete DMARC politiku.
FAQ
Q: Mohu kontaktní formulář prostě vypnout a místo něj použít odkaz mailto?
A: Můžete, ale odkazy mailto vystavují vaši e-mailovou adresu scraperům a ztrácíte možnost sbírat strukturovaná data. Pokud je spam nezvladatelný, odkaz mailto je lepší než rozbitý kontaktní formulář, ale oprava formuláře je lepší než obojí.
Q: Co když z legitimních důvodů potřebuji posílat e-mail z adresy uživatele?
A: Téměř jistě nepotřebujete. Pokud si myslíte, že ano, pravděpodobně se snažíte vyřešit problém pracovního toku (například směrování odpovědí), který už řeší Reply-To. Pokud skutečně potřebujete posílat e-maily z libovolných adres, potřebujete specializovanou e-mailovou službu se správnou autentizací, ne kontaktní formulář.
Q: Jak poznám, že je můj kontaktní formulář už zneužíván?
A: Zkontrolujte logy svého poštovního serveru pro odchozí SMTP spojení. Pokud vidíte vysoký objem odchozích e-mailů na adresy, které neznáte, nebo pokud byla vaše doména označena spamovými databázemi jako Spamhaus, pravděpodobně jste používáni jako relay. Nástroje jako MXToolbox mohou zkontrolovat reputaci vaší domény.
Q: Je bezpečné používat bezplatnou službu CAPTCHA?
A: Google reCAPTCHA je zdarma a široce používaná, ale posílá uživatelská data Googlu, což může být v rozporu s vašimi zásadami ochrany soukromí. hCaptcha je alternativa zaměřená na soukromí, která netrénuje AI modely na vašich uživatelích. Cloudflare Turnstile je další možnost, která je méně invazivní než tradiční CAPTCHA.
Q: Jaký je rozdíl mezi SPF, DKIM a DMARC?
A: SPF uvádí, které poštovní servery smějí odesílat e-maily z vaší domény. DKIM kryptograficky podepisuje odchozí e-maily, aby příjemci mohli ověřit, že nebyly pozměněny. DMARC je propojuje a říká příjemcům, co mají dělat, pokud e-mail neprojde kontrolami SPF nebo DKIM. Pro správnou e-mailovou autentizaci potřebujete všechny tři.
Zdroje
- OWASP: Email Header Injection — Podrobné vysvětlení, jak lze kontaktní formuláře zneužít k e-mail spoofingu.
- RFC 5322: Internet Message Format — Technický standard, který definuje e-mailové hlavičky včetně
FromaReply-To. - DMARC.org: Overview — Oficiální zdroj pro pochopení a implementaci DMARC politik.
- Spamhaus: Domain Blocklists — Zkontrolujte, zda byla vaše doména označena kvůli spamu, a pochopte, jak fungují blocklisty.


