Published on 2026-02-19
A practical, risk-based playbook for product owners and developers: protect form endpoints, keep conversion high, and make bots uneconomical.
“Spam submissions” usually means one of three things:
OWASP classifies this kind of thing as automated threats—bots abusing normal functionality at scale rather than exploiting a single bug (OWASP Automated Threats). That framing matters, because it pushes you towards systems that can handle volume, not just one-off tricks.
A one-size-fits-all challenge can help, but it’s rarely the whole answer. Attackers don’t need to be clever; they need to be persistent.
The more reliable approach is to treat spam prevention as an engineering loop: detect signals, make a decision, and respond in a way that matches the risk.
This is the cleanest way to stop spam submissions without turning your forms into a science project.
This is consistent with how score-based verification is designed to be used (for example, reCAPTCHA v3 returns a score and expects server-side action based on risk) (reCAPTCHA v3 docs).
If your team can agree on one thing, make it this. It’s easy for product owners to reason about and easy for developers to implement.
Bots love front-end-only defences because they can ignore them. Protect the POST handler / API route that actually creates the lead, sends the email, or writes to the database.
Do still add client-side checks for user experience, but assume anything in the browser can be bypassed.
You don’t need 27 rules. You need a small set of controls that cover different failure modes.
Rate limiting is foundational for anything that can be abused cheaply. For APIs and form endpoints, standard practice is to return HTTP 429 Too Many Requests when the client exceeds your limits (MDN on 429).
Make it per endpoint:
POST /contact should have different thresholds from POST /signupInstead of challenging everyone, score submissions and only step up the suspicious slice. This keeps your funnel moving while still giving you a lever when attacks ramp up.
If you’re using a widget-based approach, Turnstile is positioned as a user-friendly, privacy-preserving CAPTCHA alternative (Cloudflare Turnstile announcement). Whatever you choose, make sure you verify tokens server-side.
Spam bots will happily send garbage: huge payloads, odd encodings, and fields you didn’t ask for.
OWASP’s advice is simple: client-side validation can be bypassed, so you must validate on the server (OWASP Input Validation Cheat Sheet). Add sensible size limits too (body size, field lengths, attachment rules).
A product trick that works surprisingly well: accept the submission, but delay the reward.
Concrete examples:
This keeps the UX smooth while removing the attacker’s “instant payoff”.
If you can’t measure it, you’ll either over-block or under-protect.
Track:
POST /contact).Say your demo form is being flooded with nonsense.
The key is you’re protecting the creation of value (a sales-ready lead), not just adding friction at the top of the page.
Humans Only is built to stop spam submissions with risk-based verification that stays pleasant for real users. It’s fast (typically under 2 seconds), privacy-first (zero tracking), easy to drop in, and comes with real-time analytics so you can see exactly which forms are being targeted.
If you want spam form protection that product owners can tune and developers can operate without duct tape, Humans Only gives you a clean Detect → Decide → Respond loop.
To stop spam submissions reliably, protect the server endpoint, use per-form rate limits, and adopt a risk-based allow/step-up/block policy. Measure success as fewer successful spam submissions, not “how many requests we blocked”.
We use cookies to improve your experience and anonymously analyze usage.