Kontaktní formuláře ve WordPressu: bezpečnostní kontrolní seznam
Contact Form 7, WPForms, Gravity Forms, Ninja Forms nebo Fluent Forms – na pluginu záleží méně než na tom, jak je nastaven a udržován. Co zkontrolovat a co znovu zkontrolovat po každé aktualizaci.
Většina webů na WordPressu používá jeden z hrstky formulářových pluginů: Contact Form 7, WPForms, Gravity Forms, Ninja Forms, Fluent Forms a několik dalších. Kterýkoli z nich lze provozovat bezpečně, nebo nechat dokořán otevřený. Rozdíl jen zřídka spočívá v samotném pluginu, ale v jeho nastavení, doplňcích kolem něj, v tom, jak pošta opouští server, a v tom, co se se zprávami děje, když dorazí.
- Udržujte formulářový plugin i všechny doplňky aktuální a ty, které už nepoužíváte, smažte.
- Zapněte vlastní antispam pluginu – honeypot, integraci CAPTCHA, Akismet tam, kde se hodí – a ověřte, že skutečně funguje.
- Oznámení posílejte přes SMTP s ověřením z adresy ve vlastní doméně.
- Omezte nahrávané soubory podle typu a velikosti a zajistěte, aby nahrané soubory nebylo možné veřejně vypsat ani procházet.
- Nedávejte e-mailovou adresu příjemce na stránku ani do jejího zdrojového kódu.
- Ukládejte jen ty záznamy, které potřebujete, a jen tak dlouho, jak je potřebujete.
- Po každé aktualizaci WordPressu, šablony nebo kteréhokoli pluginu proveďte krátkou kontrolu.
Aktualizace: formulářový plugin a vše kolem něj
Formulářové pluginy jsou oblíbeným cílem, protože přijímají vstupy od kohokoli na internetu. Bezpečnostní opravy přicházejí jako běžné aktualizace, takže aktualizujte neprodleně – a nejen hlavní plugin. Doplňky pro platby, nahrávání souborů, napojení na CRM, podmíněnou logiku nebo další poskytovatele CAPTCHA jsou samostatný kód s vlastními zranitelnostmi. Stejně tak pluginy, které jste kdysi nainstalovali na zkoušku a zapomněli na ně. Deaktivace nestačí: deaktivované pluginy na serveru stále leží a jejich soubory jsou v některých případech přímo dosažitelné. Pokud plugin nepoužíváte, smažte jej.
Antispam: zapněte jej a pak ověřte, že funguje
Většina formulářových pluginů má vlastní antispamové možnosti nebo se integruje s externími službami: pole honeypot, které boti vyplní a lidé nikdy nevidí, CAPTCHA jako reCAPTCHA, hCaptcha nebo Cloudflare Turnstile a Akismet, který porovnává obsah zprávy se spamovou databází. Možnosti se liší podle pluginu a verze, takže nastavení zkontrolujte, místo abyste předpokládali. Externí CAPTCHA načítají skripty od třetí strany a Akismet posílá odeslaný obsah externí službě – obojí patří do vašich zásad ochrany osobních údajů a podle vašeho nastavení i do správy souhlasů.
Častějším problémem je ochrana, která je zapnutá, ale nefunguje. CAPTCHA běžící na veřejných testovacích klíčích propustí všechno. Widget, jehož skript blokuje plugin pro cache nebo optimalizaci, případně chyba v JavaScriptu, nezastaví nic. Pole honeypot bez stylů, které jej skrývají, čtou čtečky obrazovky nahlas a vyplňují jej skuteční návštěvníci. Po každé změně proto otevřete formulář v anonymním okně, zkontrolujte konzoli prohlížeče a zdrojový kód stránky a pošlete testovací zprávu. Pokud chcete ochranu, která nezávisí na Googlu, bezplatný plugin formexposed pro WordPress přidá honeypot, časovou kontrolu a proof-of-work a po aktualizacích pluginů web znovu zkontroluje – jedna z několika možností.
Pošta: jak se odesílá a kam jde
WordPress ve výchozím stavu předává poštu funkci mail v PHP na serveru a u mnoha hostingů jsou tyto zprávy špatně ověřené a končí ve spamu – nebo tiše zmizí. Místo toho odesílejte přes plugin pro SMTP nebo poštovní službu svého hostingu, se skutečnou schránkou s uživatelským jménem a heslem a s adresou odesílatele ve vlastní doméně, například vyhrazenou adresou forms@. Záznamy SPF, DKIM a DMARC domény musí tohoto odesílatele pokrývat. Nevkládejte adresu návštěvníka do pole From: není to vaše doména, takže zpráva nemůže projít sladěním DMARC a podle politiky domény návštěvníka skončí ve spamu nebo je odmítnuta. Nastavte ji jako Reply-To a stále můžete odpovědět jedním kliknutím.
Adresa příjemce patří do nastavení pluginu, ne na stránku. Zkontrolujte zdrojový kód své kontaktní stránky: odkaz mailto vedle formuláře nebo skryté pole s adresou příjemce předá tuto adresu každému sběrnému botovi. U starších nebo na míru vytvořených formulářů to může být horší – pokud server důvěřuje skrytému poli s příjemcem, může jej kdokoli změnit a použít váš formulář k posílání pošty na libovolné adresy.
Nahrávání souborů a uložené záznamy
Nahrávání souborů je nejrizikovější funkcí formulářů, takže se nejprve zeptejte, zda je vůbec potřebujete. Pokud ano, povolte pouze typy, které skutečně očekáváte – například PDF a běžné obrazové formáty –, místo abyste blokovali několik nebezpečných, a nastavte limit velikosti. Zkontrolujte, kam plugin nahrané soubory ukládá: nesmí být možné je vypsat ve veřejném adresáři a ideálně by neměly být dosažitelné vůbec na uhodnutelné adrese. Po vyřízení je smažte nebo je posílejte jako přílohy, místo abyste je uchovávali na serveru.
Mnoho formulářových pluginů nebo jejich doplňků ukládá každé odeslání do databáze WordPressu, často včetně spamu. To je užitečná záloha pro případ, že pošta selže, ale také rostoucí hromada osobních údajů. Podle zásady omezení uložení GDPR (čl. 5(1)(e)) by se takové údaje neměly uchovávat déle, než je nutné. Rozhodněte, zda uložené záznamy potřebujete, která pole a na jak dlouho, a pak použijte nastavení automatického mazání v pluginu, pokud existuje, nebo staré záznamy pravidelně mažte. Zálohy databáze obsahují stejná data.
Po každé aktualizaci
- 1Otevřete kontaktní stránku v anonymním okně: formulář a jeho antispamový prvek se zobrazují správně a konzole prohlížeče neukazuje žádné chyby.
- 2Zobrazte zdrojový kód stránky: pole honeypot a skript CAPTCHA tam stále jsou a adresa příjemce ne.
- 3Pošlete testovací zprávu: dorazí do doručené pošty, ne do spamu, a hlavičky ukazují, že SPF, DKIM a DMARC prošly.
- 4Zkontrolujte důležitá nastavení: příjemce, adresu odesílatele, povolené typy a velikosti nahrávaných souborů, jak dlouho se záznamy uchovávají.
- 5Zkontrolujte, že se u formuláře stále zobrazuje odkaz na zásady ochrany osobních údajů a případný text souhlasu.
- 6Poznamenejte si datum a co jste kontrolovali, abyste věděli, kdy formulář naposledy prokazatelně fungoval.
Jakmile se to stane rutinou, zabere to málo času a zachytí přesně ta tichá selhání, která jinak zůstanou týdny bez povšimnutí. Pro pohled zvenčí se bezplatná kontrola na formexposed.com podívá na veřejné stránky webu s formuláři, aniž by cokoli odesílala, a ukáže, zda je očekávaná ochrana na místě a účinně nastavená – bez nutnosti účtu.