Spam w formularzu nie ma jednego źródła: bot może odtworzyć żądanie, a człowiek może wysłać niechcianą wiadomość. Dobra konfiguracja zwiększa koszt automatycznych prób i wyraźnie odrzuca błędy weryfikacji. Nie obiecuje jednak, że żaden spam nigdy nie przejdzie. Zacznij od mechanizmów, które możesz sprawdzić po publikacji.
Dobierz ochronę do formularza
ZoraForms obsługuje Cloudflare Turnstile oraz Google reCAPTCHA. Wybierz dostawcę i typ klucza pasujący do doświadczenia, które chcesz pokazać użytkownikowi: Turnstile może pracować w trybie Managed, Non-interactive lub Invisible; reCAPTCHA ma warianty v2 i v3. Dla v3 konfiguracja obejmuje także próg wyniku i expected action.
Dodaj credential w Ustawieniach → Bezpieczeństwo, a następnie wybierz go przy konkretnym formularzu. Site key jest publiczną częścią integracji, secret key podajesz przy konfiguracji i nie możesz go później odczytać z panelu. Nie wkładaj secreta do HTML, skryptu strony ani repozytorium. Po zapisaniu ochrony pobierz aktualny kod z Integracji.
- Utwórz klucz dla właściwej domeny.
- Zapisz secret tylko w panelu.
- Dopasuj tryb formularza do trybu klucza.
- Wklej świeży wygenerowany kod na stronę.
Weryfikacja musi kończyć się po stronie serwera
Widget CAPTCHA w przeglądarce zbiera token, ale sam widok checkboxa lub niewidocznego widżetu nie jest dowodem. Token jest sprawdzany przez usługę po stronie serwera. Sprawdzany jest wynik i hostname, a dla reCAPTCHA v3 także score oraz action. Host powinien odpowiadać domenie witryny albo hostowi dozwolonego originu.
Błąd dostawcy, timeout lub niepoprawny token powinny kończyć się odrzuceniem zgłoszenia. To podejście fail closed zapobiega sytuacji, w której awaria weryfikacji po cichu staje się pozwoleniem na spam. Nie zastępuj tej kontroli samym JavaScriptem: skrypt można pominąć, a żądanie POST odtworzyć.
if (!captchaVerification.ok) {
return rejectSubmission("CAPTCHA verification failed");
}Dodaj warstwy i nie myl originu z tożsamością
CAPTCHA warto łączyć z honeypotem, minimalnym czasem wypełnienia i krótkoterminowym rate limitem. Honeypot to ukryte pole, którego człowiek zwykle nie dotyka; minimalny czas ogranicza natychmiastowe automatyczne wysyłki. Każdą z tych metod można obejść, lecz razem odsiewają różne proste wzorce.
Dozwolony origin określa, z jakiej kombinacji protokołu i hosta może pochodzić żądanie przeglądarki. Pomaga ograniczyć przypadkowe użycie formularza na innej stronie, ale Origin nie jest tożsamością użytkownika ani nie jest sekretem: klient HTTP może go sfałszować. Nie buduj decyzji bezpieczeństwa wyłącznie na tym nagłówku.
- Użyj CAPTCHA dla formularzy narażonych na ruch publiczny.
- Włącz aktualny honeypot i minimalny czas z panelu.
- Ustaw dokładne originy, w tym wariant www, jeśli go używasz.
- Przetestuj sukces, odrzucenie CAPTCHA i zbyt szybkie wysłanie.
Testuj i obserwuj zamiast ogłaszać zwycięstwo
Po wdrożeniu wyślij prawidłową próbę i sprawdź wynik ochrony w szczegółach zgłoszenia. Następnie sprawdź scenariusz ze starym lub brakującym kodem integracji. Zmiana ustawień CAPTCHA, honeypotu lub czasu wymaga ponownego wklejenia pełnego kodu, ponieważ formularz musi wysłać właściwe pola i tokeny.
Jeżeli spam pojawia się dalej, szukaj wzorca w treści, częstotliwości i źródle, a nie tylko podnoś próg v3 bez sprawdzenia skutków dla prawdziwych użytkowników. CAPTCHA ogranicza automatyczne wysyłki, nie usuwa spamu definitywnie. Panel i jego statusy pomagają oddzielić nowe zgłoszenia od obsłużonych; nie stanowią automatycznej klasyfikacji każdej wiadomości.