Honeypot w formularzach internetowych to niewidoczne pole wejściowe ukryte przed użytkownikami przez CSS, ale widoczne dla botów parsujących HTML. Ponieważ prawdziwi użytkownicy nigdy go nie widzą ani nie wypełniają, każdy submit z wypełnionym honeypotem jest odrzucany jako spam. Technika spopularyzowała się około 2007 przez blogi antyspamowe i wtyczkę WordPress "Honeypot for Contact Form 7", stanowiąc przyjazną prywatności alternatywę dla CAPTCHA jak Google reCAPTCHA — bez skryptów stron trzecich, bez ciasteczek, bez problemów z dostępnością, bez spadku konwersji.
Jak działa honeypot?
Serwer dodaje do formularza dodatkowe pole (często website, url, email_confirm). Jest ukrywane przez display: none, visibility: hidden, position: absolute; left: -9999px, puste <label> lub tabindex="-1" autocomplete="off". Boty wypełniają wszystkie pola — także pułapkę. Na submit serwer sprawdza:
- Pole puste → człowiek, przetwórz.
- Pole wypełnione → bot, po cichu odrzuć lub zwróć 200 OK bez zapisu.
Honeypot vs CAPTCHA: co lepsze?
| Kryterium | Honeypot | CAPTCHA (reCAPTCHA) |
|---|---|---|
| Tarcie dla użytkownika | Brak | Średnie–wysokie |
| Dostępność (WCAG 2.2) | Zgodny | Wymaga audio |
| Prywatność / RODO | Bez połączeń z zewnątrz | Skrypty Google, zgoda wymagana |
| Wydajność | ~0 KB | ~200 KB JS |
| Wykrywanie botów | ~95 % prostego spamu | ~99 % także bystre boty |
| Wpływ na konwersję | Brak | 3–29 % spadek |
Dla większości stron WordPress honeypot + kontrola czasu blokują aż nadto spamu — bez prawnych i UX-owych kosztów CAPTCHA.
Jak dodać honeypot do formularza WordPress?
Contact Form 7
Zainstaluj darmową wtyczkę "Honeypot for Contact Form 7" (ponad 1 mln aktywnych instalacji) i dodaj tag [honeypot website].
WPForms / Gravity Forms / Fluent Forms
Wszystkie trzy mają wbudowaną opcję honeypotu — jedno kliknięcie.
Własny formularz WordPress
<p style="position:absolute;left:-9999px;" aria-hidden="true">
<label for="website">Zostaw to pole puste</label>
<input type="text" name="website" id="website" tabindex="-1" autocomplete="off">
</p>if ( ! empty( $_POST['website'] ) ) {
wp_die( 'Wykryto spam', 'Błąd', array( 'response' => 200 ) );
}Najlepsze praktyki dla honeypotów
- Wiarygodne nazwy jak
website,url,company. - Ukrywaj przez CSS, nie
type="hidden". tabindex="-1"+autocomplete="off".aria-hidden="true"dla czytników ekranu.- Łącz z kontrolą czasu — odrzucaj wysłane poniżej 2–3 s.
- Zwracaj 200 OK przy odrzuceniu.
Kiedy honeypot nie wystarczy?
Zaawansowane boty wykonujące JS i respektujące widoczność CSS (Puppeteer / headless Chrome) pomijają honeypoty. Dla celów wysokiej wartości (logowanie, płatność, lead-gen z nagrodą) łącz honeypot + czas + Cloudflare Turnstile lub rate limiting. Drugie znaczenie "honeypot" — celowo podatny serwer do badania atakujących — to osobne pojęcie cyberbezpieczeństwa.
Co sprawdza InspectWP
InspectWP analizuje każdy formularz na zindeksowanej stronie i sygnalizuje brak ochrony antyspamowej na formularzach kontaktowych i logowania. Wykrywa też skrypty Google reCAPTCHA w sekcji RODO.