Skip to main content
← πŸ“„ HTML & the platformΒ·Module A3 Β· Lesson 17
TaskBuild a contact form with a honeypot. Real fields: email (required, autocomplete=email) and message (textarea, required). Add a honeypot input name='website' inside a label with class='hp'. Add CSS .hp { position:absolute; left:-9999px } and tabindex=-1 + autocomplete=off + aria-hidden=true on the input.

Honeypot fields: a single hidden input that filters 95% of bots

75 XP6 min
Theory

The trick

Bots that crawl pages and auto-fill forms don't run your JS, don't read your CSS, and don't think about which fields are visible. They look at the DOM, find every <input>, and fill them all.

So you add an extra input that humans never see and never type into:

<label class="hp">
  Leave this empty:
  <input name="website" tabindex="-1" autocomplete="off" />
</label>
.hp { position: absolute; left: -9999px; }

If your server receives a non-empty website, it's a bot. Drop the request silently.

Why offscreen-CSS, not type="hidden"

<input type="hidden"> is invisible to bots too β€” they fill it because it's still in the DOM. The "absolute, -9999px" trick keeps it focusable + parseable by bots while invisible + non-tab-stoppable for humans.

Other moves layered on top:

  • tabindex="-1" β€” sighted keyboard users won't tab into it.
  • autocomplete="off" β€” browser doesn't autofill it.
  • aria-hidden="true" β€” screen readers ignore it.
  • Name it something innocuous (website, url, name β€” NOT honeypot).

What this is not

Not a CSRF defence. Not a rate-limiter. Not a Turing test. It's a cheap first filter that costs nothing and trips up automated form-fillers. Pair it with rate-limiting + CSRF token.

πŸ”’

Sign up to start coding

Theory is open to everyone. The interactive editor, live preview, and check are unlocked with a 7-day free trial β€” card required, cancel anytime.

Sign up β€” free trial β†’

First 10 lessons in each track are free. No card needed for those.

← PreviousNext lesson β†’

Get one Python or web tip a day β€” by email

Short, hand-written, no spam. Unsubscribe in one click.