Stopping bots has a bad name, because the version most people have actually seen, a puzzle that fails on the third try, gets in the way of actual visitors while barely slowing down a serious attacker. A good bot defense looks almost nothing like that. It works in layers, stays mostly invisible, and only adds friction for the requests that genuinely look automated. Here is the plan we follow.

A large share of scraping and password guessing traffic comes from scripts hitting an address directly, with no JavaScript engine, no actual session behaviour, and no actual page rendering at all. A simple, useful first check is whether a request looks like it came from an actual browser before it ever reaches a sensitive page. Did it run the page's JavaScript. Does it carry the session details an actual browser would carry. Does the pattern of requests look like a person clicking through pages, rather than a script hitting one address again and again. None of this needs to be shown to the visitor at all.

Instead of asking every single visitor to prove they are human, ask the browser itself to prove it is a browser, using a small piece of JavaScript that runs a quick calculation only an actual browser can do, then attaches proof of that to later requests. An actual visitor never even notices this happening. A simple script that cannot run JavaScript fails this immediately and gets quietly blocked, long before it reaches a login form or a place where data can be pulled out. Save the visible, annoying test for the smaller group of requests that fail this quiet check, instead of placing it in front of everyone.

Limiting requests by address alone is necessary but no longer enough, since bot traffic today is often spread across thousands of ordinary looking addresses. Combining address based limits with signs from the session and the device, such as whether this visitor is moving through the application faster than is physically possible, catches patterns that a simple address based limit misses entirely.

Strong bot defense can accidentally block automated traffic you actually want, monitoring tools, partner systems, your own test scripts. Keep a clear, written list of automated visitors you trust, and make sure your defense always records why it blocked a request, not only that it blocked something. The worst version of a bot incident is one where nobody can tell whether an attacker was stopped, or a paying customer's connection was simply broken by mistake.

The strongest setup combines a quiet check, behaviour based limits, and a visible test kept in reserve, used one after another, starting with whichever check bothers an actual visitor the least. Throwing every defense at every single request slows down actual visitors and tells you nothing useful about which layer is actually doing the work.


Maybeach Tech builds production web applications with layered, low friction bot defenses. Get in touch and let us talk about hardening your platform.

Related Post

Workflow Engines vs. Hard-Coded Approval Chains: When to Build the Abstraction

Not every approval process needs a workflow engine. If everyone follows the same stable path, a simp...

CSRF and Request Integrity: Defense in Depth for Form-Heavy Apps

Cross Site Request Forgery is an old problem, well understood by now, and it still turns up in revie...