Powrót na bloga
Podstawy Opublikowano 28.09.2026 6 min czytania

Formularze kontaktowe w WordPressie: lista kontrolna bezpieczeństwa

Contact Form 7, WPForms, Gravity Forms, Ninja Forms czy Fluent Forms – liczy się nie tyle wtyczka, ile jej konfiguracja i utrzymanie. Oto, co sprawdzić – i co sprawdzać po każdej aktualizacji.

Większość stron na WordPressie korzysta z jednej z kilku popularnych wtyczek formularzy: Contact Form 7, WPForms, Gravity Forms, Ninja Forms, Fluent Forms i paru innych. Każdą z nich da się prowadzić bezpiecznie – i każdą da się zostawić szeroko otwartą. Różnica rzadko tkwi w samej wtyczce. Decydują ustawienia, dodatki wokół niej, sposób wysyłki maili i to, co dzieje się z wiadomościami po ich odebraniu.

  • Aktualizuj wtyczkę formularzy i wszystkie jej dodatki, a te, których już nie używasz, usuń.
  • Włącz wbudowaną ochronę antyspamową – honeypot, integrację z CAPTCHA, Akismet tam, gdzie ma to sens – i sprawdź, czy naprawdę działa.
  • Wysyłaj powiadomienia przez uwierzytelniony SMTP z adresu we własnej domenie.
  • Ogranicz przesyłane pliki pod względem typu i rozmiaru i zadbaj o to, żeby nie dało się ich publicznie wylistować ani przeglądać.
  • Nie pokazuj adresu odbiorcy na stronie ani w jej kodzie źródłowym.
  • Przechowuj tylko te zgłoszenia, których potrzebujesz, i tylko tak długo, jak to konieczne.
  • Po każdej aktualizacji WordPressa, motywu czy wtyczki zrób krótki test.

Aktualizacje: wtyczka formularzy i wszystko wokół niej

Wtyczki formularzy są częstym celem ataków, bo przyjmują dane od każdego w internecie. Poprawki bezpieczeństwa przychodzą jako zwykłe aktualizacje, więc pierwsza zasada jest prosta: aktualizuj szybko – i nie tylko główną wtyczkę. Dodatki do płatności, przesyłania plików, integracji z CRM, logiki warunkowej czy dodatkowych dostawców CAPTCHA to osobny kod z własnymi lukami. To samo dotyczy wtyczek zainstalowanych kiedyś na próbę i zapomnianych. Dezaktywacja nie wystarczy: wyłączone wtyczki nadal leżą na serwerze, a do ich plików czasem da się dostać bezpośrednio. Czego nie używasz, usuń.

Antyspam: włącz go, a potem sprawdź, czy działa

Większość wtyczek formularzy ma własne opcje antyspamowe albo integruje się z zewnętrznymi usługami: polem honeypot, które boty wypełniają, a ludzie w ogóle go nie widzą, usługami CAPTCHA, takimi jak reCAPTCHA, hCaptcha czy Cloudflare Turnstile, oraz Akismetem, który porównuje treść wiadomości z bazą spamu. To, co jest dostępne, zależy od wtyczki i jej wersji – zajrzyj do ustawień, zamiast zakładać. Zewnętrzne CAPTCHA ładują skrypty od podmiotu trzeciego, a Akismet przesyła wpisaną treść do zewnętrznej usługi – jedno i drugie powinno znaleźć się w polityce prywatności, a zależnie od konfiguracji także w zarządzaniu zgodami.

Częstszy problem to jednak ochrona, która jest włączona, ale nie działa. CAPTCHA skonfigurowana z publicznymi kluczami testowymi przepuszcza wszystko. Widżet, którego skrypt blokuje wtyczka do cache’owania lub optymalizacji albo błąd JavaScriptu, niczego nie zatrzymuje. Pole honeypot bez stylów, które je ukrywają, zostaje odczytane przez czytniki ekranu i wypełnione przez prawdziwych odwiedzających. Dlatego po każdej zmianie otwórz formularz w oknie prywatnym, zajrzyj do konsoli przeglądarki, sprawdź kod źródłowy strony i wyślij wiadomość testową. Jeśli chcesz ochrony bez Google, darmowa wtyczka formexposed do WordPressa dodaje honeypot, kontrolę czasu i proof-of-work, a po aktualizacjach wtyczek ponownie sprawdza stronę – to jedna z kilku możliwości.

Poczta: jak jest wysyłana i dokąd trafia

Domyślnie WordPress przekazuje maile do funkcji mail() PHP na serwerze. U wielu dostawców hostingu takie wiadomości nie są porządnie uwierzytelnione i lądują w spamie – albo po cichu znikają. Wysyłaj je zamiast tego przez wtyczkę SMTP lub usługę pocztową hostingu, z prawdziwej skrzynki z loginem i hasłem i z adresu we własnej domenie, na przykład osobnego adresu forms@. Domena potrzebuje rekordów SPF, DKIM i DMARC obejmujących tego nadawcę. Nie wpisuj adresu odwiedzającego w pole From: nie należy on do Twojej domeny, więc wiadomość nie przejdzie weryfikacji DMARC i – zależnie od polityki domeny odwiedzającego – trafi do spamu albo zostanie odrzucona. Ustaw go jako Reply-To – wtedy i tak odpowiesz jednym kliknięciem.

Adres odbiorcy powinien być w ustawieniach wtyczki, a nie na stronie. Zajrzyj do kodu źródłowego strony kontaktowej: link mailto tuż obok formularza albo ukryte pole z adresem odbiorcy podaje ten adres każdemu botowi, który zbiera maile. W starszych lub pisanych samodzielnie formularzach ukryte pole odbiorcy może narobić jeszcze więcej szkód: jeśli serwer mu ufa, każdy może je zmienić i wysyłać przez Twój formularz maile na dowolne adresy.

Przesyłane pliki i zapisane zgłoszenia

Przesyłanie plików to najbardziej ryzykowna funkcja formularza, więc najpierw zastanów się, czy w ogóle jej potrzebujesz. Jeśli tak, dopuść tylko te typy plików, których faktycznie się spodziewasz – na przykład PDF i popularne formaty graficzne – zamiast blokować kilka niebezpiecznych, i ustaw limit rozmiaru. Sprawdź, gdzie wtyczka zapisuje przesłane pliki: nie mogą być widoczne na liście w publicznym katalogu i najlepiej w ogóle nie powinny być dostępne pod adresem, który da się zgadnąć. Usuwaj pliki, gdy już je obsłużysz, albo wysyłaj je jako załączniki, zamiast trzymać na serwerze.

Wiele wtyczek formularzy lub ich dodatków zapisuje każde zgłoszenie w bazie danych WordPressa, często razem ze spamem. Przydaje się to jako kopia zapasowa, gdy mail nie dotrze, ale to też rosnący zbiór danych osobowych. Zgodnie z zasadą ograniczenia przechowywania z RODO (art. 5 ust. 1 lit. e) takich danych nie trzyma się dłużej, niż to konieczne. Zdecyduj, czy potrzebujesz zapisanych zgłoszeń, które pola warto zachować i na jak długo. Potem użyj funkcji automatycznego usuwania we wtyczce, jeśli ją ma, albo regularnie kasuj stare wpisy. Pamiętaj, że kopie zapasowe bazy zawierają te same dane.

Po każdej aktualizacji

  1. 1Otwórz stronę kontaktową w oknie prywatnym i sprawdź, czy formularz i ochrona antyspamowa wyświetlają się poprawnie, a konsola przeglądarki nie pokazuje błędów.
  2. 2Zajrzyj do kodu źródłowego: pole honeypot i skrypt CAPTCHA nadal tam są, a adresu odbiorcy nie ma.
  3. 3Wyślij wiadomość testową i sprawdź, czy trafia do skrzynki odbiorczej, a nie do spamu, oraz czy nagłówki pokazują pozytywny wynik SPF, DKIM i DMARC.
  4. 4Przejrzyj kluczowe ustawienia: odbiorcę, adres nadawcy, dozwolone typy i rozmiary plików, czas przechowywania zgłoszeń.
  5. 5Sprawdź, czy przy formularzu nadal widać link do polityki prywatności i ewentualne teksty zgód.
  6. 6Zanotuj datę i zakres sprawdzenia – dzięki temu wiesz, kiedy formularz ostatnio na pewno działał.

Gdy wejdzie to w nawyk, zajmuje niewiele czasu, a wyłapuje właśnie te ciche awarie, których inaczej nikt nie zauważa tygodniami. Jeśli chcesz spojrzenia z zewnątrz, darmowy test na formexposed.com przegląda publiczne strony z formularzami, niczego nie wysyłając, i pokazuje, czy oczekiwana ochrona jest na miejscu i skutecznie skonfigurowana – bez zakładania konta.