DEV Community

Cover image for How Invisible CAPTCHAs Work
Sospeter Kinyanjui
Sospeter Kinyanjui

Posted on

How Invisible CAPTCHAs Work

You have probably visited a website and seen a page that says:

“Verifying you are human…”

You don't have to solve a puzzle or click anything. After a few seconds, the website simply loads.

This is typically an invisible CAPTCHA or risk-based verification system. Examples include technologies such as Cloudflare Turnstile and Google's reCAPTCHA.

The interesting question is: what is happening during those few seconds?

The basic idea

An invisible CAPTCHA doesn't necessarily ask you to prove that you're human. Instead, the browser is evaluated to determine whether the request looks legitimate.

A simplified flow looks like this:

Browser
   │
   │ GET /dashboard
   ▼
Website / Bot Protection
   │
   ▼
Verification Page
   │
   │ JavaScript executes
   ▼
Browser signals
   │
   ▼
Risk assessment
   │
   ├── Low risk ──────► Allow
   │
   └── Suspicious ────► Challenge / Block

Enter fullscreen mode Exit fullscreen mode

The verification happens largely in the background.

What happens in the browser?

The website can run JavaScript that interacts with the browser and observes various characteristics of the environment.

Depending on the provider, this can include signals such as:

  • Whether JavaScript is functioning normally
  • Browser and device characteristics
  • Cookies and storage behavior
  • Network and IP reputation
  • Request frequency and timing
  • Session behavior
  • Characteristics associated with automated browsers
  • Inconsistencies in the browser environment

Why can't an AI simply generate all of these signals?

An intelligent model can generate plausible values, but many of these signals are not simply pieces of information that can be invented.

Consider a few examples.

IP reputation is external to the model. A model can claim that an IP is trustworthy, but it cannot change the reputation associated with the actual network address from which the request arrives.

Cookies and session state have to remain consistent across real requests. The browser has to actually store and return them correctly.

Timing and request behavior occur over time. A system isn't just generating one answer; it is producing a sequence of requests whose timing and behavior can be observed.

Browser characteristics must also be consistent with one another. A client might claim to have one environment while exposing behavior that belongs to another.

This creates an important problem for automation:

                    Signals
                       │
       ┌───────────────┼───────────────┐
       ▼               ▼               ▼
    Browser          Network         Session
   behavior          context          state
       │               │               │
       └───────────────┼───────────────┘
                       ▼
                  Consistency
                       │
                       ▼
                 Risk decision
Enter fullscreen mode Exit fullscreen mode

An automated system might successfully imitate one signal while failing to make all of the signals agree with each other.

For example, it could behave like a normal browser while coming from a network with a suspicious reputation. Or it could produce convincing browser characteristics while exhibiting an unusual request pattern.

This is why invisible CAPTCHAs don't need to discover one magical signal that proves something is a bot. They can instead look for many independent pieces of evidence and inconsistencies between them.

An intelligent model can generate convincing behavior, but generating convincing behavior is different from controlling every underlying property of the environment in which that behavior occurs.

No single signal necessarily determines the result. The system combines multiple signals to estimate how trustworthy the request appears to be.

Conceptually:

Browser signals
      +
Network signals
      +
Session behavior
      +
Request behavior
      ↓
Risk assessment
      ↓
Allow / Verify / Block
Enter fullscreen mode Exit fullscreen mode

Why does the page wait for a few seconds?

Suppose you request:

GET /dashboard

Instead of immediately returning the dashboard, the protection system might first return a verification page:

`GET /dashboard`
      ↓
Verification page
      ↓
JavaScript executes
      ↓
Verification request
      ↓
Risk assessment
      ↓
Verification result
      ↓
`GET /dashboard`
      ↓
Dashboard
Enter fullscreen mode Exit fullscreen mode

From your perspective, it looks like the website simply paused for two or three seconds.

In reality, the browser may have been performing several verification steps in the background.

Why is there sometimes a checkbox?

An invisible CAPTCHA doesn't always remain completely invisible.

If the system isn't sufficiently confident, it can escalate:

Low risk
   ↓
No interaction

Uncertain
   ↓
Checkbox

High risk
   ↓
CAPTCHA challenge
Enter fullscreen mode Exit fullscreen mode

The checkbox is therefore not necessarily the fundamental mechanism. It is an additional verification step when the system needs more evidence.

The important distinction

The system isn't necessarily asking:

“Is this a human?”

It's closer to asking:

“Does this request and browser session look legitimate?”

The invisible CAPTCHA is therefore best understood as a background risk assessment performed on the browser and its request, where multiple signals—many of which come from the actual network, browser, and session rather than something an AI can simply invent—are combined to decide whether the request should be trusted.

until next time, peace, focus

Top comments (0)