Jak zatrzymać spam w formularzu kontaktowym: honeypot, pułapka czasowa, CAPTCHA | We.Inc
Zatrzymaj spam w formularzu kontaktowym na swojej stronie za pomocą pola honeypot, pułapki czasowej i darmowej CAPTCHY, takiej jak Turnstile, reCAPTCHA lub hCaptcha, weryfikowanej na serwerze. Demo na żywo.
Jak zatrzymać spam w formularzu kontaktowym
Zacznij od tanich zabezpieczeń, a uciążliwe zostaw na później. Dodaj ukryte pole honeypot, którego ludzie nigdy nie widzą, ale boty je wypełniają, odrzucaj formularze wysłane szybciej, niż człowiek zdążyłby pisać, a jeśli spam nadal się przedostaje, dodaj usługę CAPTCHA, taką jak Turnstile, reCAPTCHA lub hCaptcha, której token weryfikuje Twój serwer.
Porównanie zabezpieczeń przed spamem
Metoda
Co zauważają odwiedzający
Co zatrzymuje
Wymaga kodu na serwerze
Pole honeypot
Nic
Proste boty, które wypełniają każde pole
Tak, jednolinijkowe sprawdzenie
Pułapka czasowa
Nic
Boty, które wysyłają formularz natychmiast
Tak
Cloudflare Turnstile
Zwykle nic, czasem pole wyboru
Większość automatycznych wysyłek
Tak, wywołanie siteverify
reCAPTCHA v3
Nic; otrzymujesz wynik punktowy
Większość automatycznych wysyłek
Tak, weryfikacja i wybór progu
hCaptcha
Czasem łamigłówka
Większość automatycznych wysyłek
Tak, wywołanie siteverify
Boty spamujące przeszukują sieć w poszukiwaniu formularzy i automatycznie je wysyłają. Twój serwer nie widzi, kto pisze, więc każde zabezpieczenie działa albo przez wychwycenie zachowania, którego człowiek by nie przejawił, albo przez poproszenie zewnętrznej usługi o potwierdzenie, że odwiedzający jest prawdziwy. Wypróbuj dwa pierwsze zabezpieczenia w demo, a potem skopiuj pasujące do nich sprawdzenie po stronie serwera.
Dodaj jedno dodatkowe pole o kuszącej nazwie, na przykład website, i ukryj je za pomocą CSS zamiast type=hidden.
Dodaj ukryte pole zawierające czas wyświetlenia formularza.
Na serwerze odrzucaj każde zgłoszenie, w którym pułapka ma wartość albo odstęp czasu wynosi mniej niż kilka sekund.
Jeśli spam nie ustaje, dodaj widżet CAPTCHA i zweryfikuj jego token na serwerze, zanim zapiszesz lub wyślesz wiadomość e-mailem.
Po cichu przyjmuj i odrzucaj zgłoszenia złapane w pułapkę. Wyświetlenie błędu podpowiada botowi, co ma zmienić.
Nadaj polu pułapki tabindex="-1" i aria-hidden="true", aby użytkownicy klawiatury i czytników ekranu nigdy do niego nie trafili.
Ustaw krótką pułapkę czasową, około trzech sekund. Autouzupełnianie w przeglądarce pozwala prawdziwym ludziom szybko wypełnić formularz.
Nigdy nie umieszczaj tajnego klucza CAPTCHA w kodzie strony. Jego miejsce jest wyłącznie na serwerze.
Najczęściej zadawane pytania
Czym jest pole honeypot?
To pole, które znajduje się w kodzie formularza, ale jest ukryte przed ludźmi. Odwiedzający zostawiają je puste, bo go nie widzą; boty wypełniające każde znalezione pole coś w nim wpisują, co je zdradza.
Czy istnieje darmowa alternatywa dla reCAPTCHA?
Tak. Cloudflare Turnstile i hCaptcha oferują darmowe plany działające tak samo: skrypt i widżet na stronie, a potem wywołanie z serwera adresu siteverify z Twoim tajnym kluczem i tokenem odwiedzającego. Limity sprawdź na aktualnej stronie z planami każdego dostawcy.
Czy reCAPTCHA v3 wyświetla łamigłówkę?
Nie. Według dokumentacji Google wersja v3 zwraca wynik, w którym 1.0 oznacza bardzo prawdopodobną dobrą interakcję, a 0.0 bardzo prawdopodobnego bota, i zaleca zacząć od progu 0.5. To Ty decydujesz, co zrobić z niskimi wynikami.
Czy sam widżet wystarczy, aby zatrzymać spam?
Nie. Dokumentacja Cloudflare wprost stwierdza, że sam widżet po stronie klienta nie chroni Twoich formularzy. Bot może wysłać dane bezpośrednio na adres formularza, dlatego serwer musi zweryfikować token.
Dlaczego mimo honeypota nadal dostaję spam?
Niektóre boty uruchamiają prawdziwą przeglądarkę i wypełniają tylko widoczne pola, a część spamu wpisują ludzie. Dodaj pułapkę czasową, a potem CAPTCHĘ. Odrzucaj też wiadomości pełne linków, jeśli Twój formularz nigdy ich nie potrzebuje.
Dlaczego darmowe zabezpieczenia idą na pierwszy ogień
Honeypot i pułapka czasowa nic nie kosztują odwiedzających, a wyłapują dużą część spamu pochodzącego z prymitywnych skryptów. CAPTCHA dodaje skrypt zewnętrzny, wpis w polityce prywatności, a czasem wyzwanie do rozwiązania, więc zostaw ją na sytuację, gdy będzie potrzebna.
Ukryj pułapkę we właściwy sposób
Użyj CSS, który przesuwa pole poza ekran, zamiast type="hidden", bo wiele botów pomija ukryte pola. Wyłącz w nim autouzupełnianie przez autocomplete="off", ponieważ przeglądarka, która by je wypełniła, oznaczyłaby prawdziwą osobę jako bota.
MDN zaznacza, że przeglądarki mogą ignorować autocomplete="off" w polach logowania, więc nie nazywaj pułapki email ani password.
Weryfikuj tokeny CAPTCHA na serwerze
Każda usługa umieszcza token w formularzu. Twój serwer wysyła ten token wraz z tajnym kluczem na adres siteverify dostawcy i kontynuuje tylko wtedy, gdy odpowiedź mówi, że success ma wartość true.
Tokeny Turnstile są ważne przez 300 sekund i można je sprawdzić tylko raz. Tokeny reCAPTCHA v3 są ważne dwie minuty, więc pobieraj token w chwili wysyłki formularza, a nie przy ładowaniu strony.
Skopiuj honeypot i pułapkę czasową
Kod HTML trafia do Twojego formularza. Sprawdzenie po stronie serwera pokazujemy dla Node z Express, ale w każdym języku to logika na trzy linijki.
Formularz z polem honeypot
Klasa .hp przesuwa pułapkę poza ekran. Pole started jest wypełniane bieżącym czasem przez niewielki skrypt.
Sprawdzenie na serwerze (Node, Express)
Boty dostają tę samą odpowiedź co ludzie, więc nie mogą się dowiedzieć, które sprawdzenie je złapało.
Dodawanie Turnstile, reCAPTCHA lub hCaptcha
Wszystkie trzy działają w ten sam sposób. Poniższe szczegóły pochodzą z dokumentacji poszczególnych dostawców.
Porównanie usług CAPTCHA
Turnstile
reCAPTCHA v3
hCaptcha
Skrypt
Ładowany z Google z Twoim kluczem witryny
Widżet
<div class="cf-turnstile" data-sitekey>
Brak widżetu; wywołaj execute przy wysyłce
<div class="h-captcha" data-sitekey>
Weryfikacja pod adresem
challenges.cloudflare.com/turnstile/v0/siteverify
Endpoint weryfikacji Google
api.hcaptcha.com/siteverify
Ważność tokenu
300 sekund, jednorazowy
Dwie minuty
Zobacz dokumentację dostawcy
Wynik
success true lub false
success plus wynik od 0.0 do 1.0
success true lub false
Weryfikacja tokenu Turnstile (Node 18 lub nowszy)
Widżet dodaje do Twojego formularza pole o nazwie cf-turnstile-response. Przechowuj sekret w zmiennej środowiskowej.
Demo na żywo: honeypot plus pułapka czasowa
Nic nie jest nigdzie wysyłane. Kliknięcie Wyślij uruchamia te same sprawdzenia, które wykonałby serwer, tutaj, w Twojej przeglądarce.
Twoje imię
Wiadomość
Strona internetowa (zostaw puste)
Zachowaj się jak bot: wypełnij ukryte pole
Wyślij
Zacznij od nowa
Wypełnij formularz i kliknij Wyślij, aby zobaczyć, co zdecyduje sprawdzenie na serwerze.
Przyjęto: pułapka była pusta i minęło {n} s. Prawdziwy formularz wysłałby teraz wiadomość.
Odrzucono: ukryte pole miało wartość, więc wygląda to na bota. Odwiedzający i tak zobaczyłby podziękowanie.
Odrzucono: wysłano po {n} s, szybciej niż minimum wynoszące {m} s.
Ukryte pole jest tu pokazane z obramowaniem, abyś widział to, co widzą boty.