Acme Shop

No bot protection — the origin is fully exposed

Bot Defense & IVT — how it decides

Native to wslproxy, at the edge, no external service. Every request on a protected server is scored from three kinds of evidence, then classed and acted on.

  1. Fingerprint — what the request claims, and whether the rest of it agrees.
  2. Identity — verified search crawlers (reverse + forward DNS) and data-centre IP ranges.
  3. Behaviour — what this IP and this visitor have been doing, across every worker.

The score is the sum of the signal weights, capped at 100: below 40 human, from 40 suspect, from 80 bot. Verified crawlers are a class of their own and are allowed.

Actions

Invalid traffic (IVT)

Each verdict carries an MRC-style tier, forwarded to the origin as X-WSL-Bot-IVT: none (valid), GIVT — general invalid traffic, found by lists and routine filtration (declared bots, tools, data-centre traffic, verified crawlers), and SIVT — sophisticated invalid traffic that needs analysis (spoofed browsers, headless automation, impersonated crawlers, abnormal behaviour). The ad scenario in the lab shows an origin using it to stop billing for invalid impressions.

Signals

KindSignalIVTWeightMeaning
FingerprintBD_UA_MISSINGGIVT40No User-Agent header.
FingerprintBD_UA_AUTOMATIONGIVT35HTTP library or CLI tool User-Agent (curl, python-requests, Go, Java, …).
FingerprintBD_UA_SCANNERGIVT90Vulnerability scanner User-Agent (sqlmap, nikto, nuclei, …).
FingerprintBD_UA_DECLARED_BOTGIVT30Self-declared bot, crawler or spider that is not a verified search engine.
FingerprintBD_UA_HEADLESSSIVT70Headless or automated browser (HeadlessChrome, PhantomJS, Selenium, …).
FingerprintBD_BROWSER_NO_ACCEPTSIVT15Claims to be a browser but sends no Accept header.
FingerprintBD_BROWSER_NO_LANGUAGESIVT20Claims to be a browser but sends no Accept-Language.
FingerprintBD_BROWSER_NO_ENCODINGSIVT15Claims to be a browser but sends no Accept-Encoding.
FingerprintBD_BROWSER_NO_HINTSSIVT15Claims to be Chromium but sends no Sec-CH-UA client hints over HTTPS.
FingerprintBD_BROWSER_NO_FETCH_METASIVT15Claims to be a modern browser but sends no Sec-Fetch-* metadata over HTTPS.
FingerprintBD_OLD_PROTOCOLSIVT15Claims to be a browser but speaks HTTP/1.0.
IdentityBD_FAKE_CRAWLERSIVT90Claims to be Googlebot/Bingbot/… but reverse + forward DNS says otherwise.
IdentityBD_DATACENTERGIVT25Client IP is in a hosting / cloud provider range.
BehaviourBD_BURSTSIVT30Request burst from one IP above the per-10s limit.
BehaviourBD_SCRAPINGSIVT35Too many distinct pages per minute for one visitor.
BehaviourBD_ERROR_STORMSIVT30Many 401/403/404/405 responses for one IP — scanning, enumeration, carding.
BehaviourBD_LOGIN_VELOCITYSIVT50Too many login attempts from one IP — credential stuffing.
BehaviourBD_NO_COOKIESIVT25Never returns the session cookie it is given.
BehaviourBD_NO_ASSETSSIVT20Loads many pages but never the CSS/JS/images a browser fetches.

Failure behaviour

Fails open: any internal error lets the request through and is logged and counted. Search-engine verification that cannot reach DNS is "unknown", never "fake".