From 01a84ba0c10835c3082adcc3ed3c1ec0195e04ab Mon Sep 17 00:00:00 2001 From: Chris Portscheller Date: Fri, 23 Oct 2026 21:05:37 -0500 Subject: [PATCH 1/2] examples: make Express detection visible before enforcement --- examples/express-basic/README.md | 154 ++++++------------------ examples/express-basic/package.json | 5 +- examples/express-basic/src/app.ts | 36 ++++++ examples/express-basic/src/index.ts | 93 +------------- examples/express-basic/test/app.test.ts | 57 +++++++++ 5 files changed, 141 insertions(+), 204 deletions(-) create mode 100644 examples/express-basic/src/app.ts create mode 100644 examples/express-basic/test/app.test.ts diff --git a/examples/express-basic/README.md b/examples/express-basic/README.md index 6475abd..99ea966 100644 --- a/examples/express-basic/README.md +++ b/examples/express-basic/README.md @@ -1,142 +1,66 @@ -# Express.js Basic Example +# See a WebDecoy tripwire work in Express -Basic example of Web Decoy integration with Express.js. +Run a local server, compare an ordinary request with a controlled decoy request, +and inspect the verdict before choosing to block. Local rules need no account +or API key. This demo starts in monitor mode and binds to `127.0.0.1`. -## Setup +## Run from this repository -1. Install dependencies: +Requires Node.js 20+ for the verification tests. From the repository root: ```bash -npm install +npm ci +npm run build -w @webdecoy/node -w @webdecoy/express +npm run dev -w webdecoy-express-example ``` -2. Copy `.env.example` to `.env` and add your API key: +## Compare two requests -```bash -cp .env.example .env -``` - -3. Edit `.env` and set your Web Decoy API key: - -```env -WEBDECOY_API_KEY=sk_live_your_key_here -``` - -## Run - -Development mode: - -```bash -npm run dev -``` - -Production build: +In another terminal: ```bash -npm run build -npm start +curl -i http://127.0.0.1:3000/ +curl -i http://127.0.0.1:3000/demo-decoy ``` -## Test +| Request | Monitor-mode HTTP response | Local decision | +| --- | --- | --- | +| `/` | `200` | `ALLOW`, `tripwire: false` | +| `/demo-decoy` | `404`, from the demo route | `DENY`, `tripwire: true` | -The server will start on `http://localhost:3000`. +The second request is deliberately made by you. It demonstrates that a selected +path matched a rule, not that a malicious AI bot was identified. The `404` alone +is not a detection receipt: inspect the `decision` JSON, which comes from +`req.webdecoyDecision`. -### Endpoints +## Opt into enforcement on this local demo -- `GET /health` - Health check (unprotected) -- `GET /` - Protected home endpoint -- `GET /api/data` - Protected API endpoint -- `POST /api/submit` - Protected POST endpoint - -### Testing Bot Detection - -Use these curl commands to test different bot detection scenarios: - -#### 1. Chrome Browser (should ALLOW) - -Real browser with full security headers - passes local analysis with minimal threat score: - -```bash -curl -s http://localhost:3000/ \ - -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" \ - -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8" \ - -H "Accept-Language: en-US,en;q=0.5" \ - -H "Accept-Encoding: gzip, deflate, br" \ - -H "Sec-Ch-Ua: \"Not_A Brand\";v=\"8\", \"Chromium\";v=\"120\", \"Google Chrome\";v=\"120\"" \ - -H "Sec-Ch-Ua-Mobile: ?0" \ - -H "Sec-Ch-Ua-Platform: \"macOS\"" \ - -H "Sec-Fetch-Dest: document" \ - -H "Sec-Fetch-Mode: navigate" \ - -H "Sec-Fetch-Site: none" \ - -H "Sec-Fetch-User: ?1" -``` - -#### 2. Python Requests (should BLOCK) - -Common scraping library - easily detected and blocked: +Stop the server with Ctrl+C, then restart it: ```bash -curl -s http://localhost:3000/ \ - -H "User-Agent: python-requests/2.28.0" +WEBDECOY_MODE=enforce npm run dev -w webdecoy-express-example ``` -#### 3. Curl User-Agent (should BLOCK) +Repeat the two requests. `/` remains `200`; `/demo-decoy` returns `403` before +the demo route runs. Restart without that variable to return to monitor mode. -Default curl user-agent - flagged as automated tool: +Run the HTTP checks without a browser or API key: ```bash -curl -s http://localhost:3000/ \ - -H "User-Agent: curl/8.1.2" +npm test -w webdecoy-express-example ``` -#### 4. Empty User-Agent (should BLOCK) - -Missing user-agent is highly suspicious: - -```bash -curl -s http://localhost:3000/ \ - -H "User-Agent: " -``` - -#### 5. Scrapy Bot (should BLOCK) - -Known web scraping framework: - -```bash -curl -s http://localhost:3000/ \ - -H "User-Agent: Scrapy/2.8.0 (+https://scrapy.org)" -``` - -#### 6. Go HTTP Client (should BLOCK) - -Default Go HTTP client user-agent: - -```bash -curl -s http://localhost:3000/ \ - -H "User-Agent: Go-http-client/1.1" -``` - -### Simulating External IP Addresses - -When testing locally, connections come from `::1` (IPv6 localhost). To simulate external IPs for realistic testing, use the `X-Forwarded-For` header: - -```bash -curl -s http://localhost:3000/ \ - -H "User-Agent: python-requests/2.28.0" \ - -H "X-Forwarded-For: 203.0.113.50" -``` - -This detection will show the IP `203.0.113.50` in the Web Decoy dashboard instead of `::1`. - -## What's Happening +## Use it on your own app -1. All requests (except `/health`) go through Web Decoy middleware -2. The middleware extracts request metadata (IP, headers, etc.) -3. Local analysis checks for suspicious patterns -4. If needed, server-side verification with TLS fingerprinting -5. Request is allowed or blocked based on threat score -6. Detection info is available via `req.webdecoy` +The example keeps one controlled decoy path and exposes summaries in local +responses for verification. In production, keep verdicts in server-side logs, +choose decoy paths outside legitimate user flows, and review scanners, +prefetchers and accessibility flows before enforcing. Changing a User-Agent +does not prove that a client is malicious or human. -## Learn More +Behind a proxy, configure the documented `trustProxy` setting for your actual +topology; never trust arbitrary forwarded headers. This example does not +collect JA4, identify every AI agent, or report to the cloud dashboard. -See the [main README](../../README.md) for more documentation. +[Express setup documentation](https://docs.webdecoy.com/sdk-plugins/express/?utm_source=github&utm_medium=example&utm_campaign=express_tripwire_proof) +ยท [Optional WebDecoy dashboard](https://app.webdecoy.com/?utm_source=github&utm_medium=example&utm_campaign=express_tripwire_proof) diff --git a/examples/express-basic/package.json b/examples/express-basic/package.json index 6046a13..939275d 100644 --- a/examples/express-basic/package.json +++ b/examples/express-basic/package.json @@ -2,11 +2,12 @@ "name": "webdecoy-express-example", "version": "0.1.0", "private": true, - "description": "Basic Express.js example with Web Decoy", + "description": "Verify local WebDecoy tripwires in Express, then opt into enforcement", "scripts": { "dev": "tsx src/index.ts", "build": "tsc", - "start": "node dist/index.js" + "start": "node dist/index.js", + "test": "tsx --test test/*.test.ts" }, "dependencies": { "@webdecoy/express": "*", diff --git a/examples/express-basic/src/app.ts b/examples/express-basic/src/app.ts new file mode 100644 index 0000000..f7c757f --- /dev/null +++ b/examples/express-basic/src/app.ts @@ -0,0 +1,36 @@ +import express from 'express'; +import { webdecoy } from '@webdecoy/express'; +import { tripwire } from '@webdecoy/node'; + +// Local demonstration: expose summaries here so the verdict is visible. +// Keep this information server-side in a production application. +export function createApp(mode: 'monitor' | 'enforce' = 'monitor') { + const app = express(); + app.disable('x-powered-by'); + app.use(express.json()); + app.get('/health', (_req, res) => res.json({ status: 'ok' })); + app.use(webdecoy({ + mode, + rules: [tripwire({ paths: ['/demo-decoy'], includeDefaults: false })], + skipPaths: ['/health'], + })); + function decision(req: express.Request) { + return { + conclusion: req.webdecoyDecision?.conclusion, + tripwire: req.webdecoyDecision?.deniedBy('tripwire') ?? false, + }; + } + app.get('/', (req, res) => { + res.json({ message: 'Ordinary route', decision: decision(req) }); + }); + app.get('/demo-decoy', (req, res) => { + res.status(404).json({ message: 'Controlled decoy route', decision: decision(req) }); + }); + app.get('/api/data', (req, res) => { + res.json({ data: { message: 'Example data' }, decision: decision(req) }); + }); + app.post('/api/submit', (req, res) => { + res.json({ success: true, received: req.body.data, decision: decision(req) }); + }); + return app; +} diff --git a/examples/express-basic/src/index.ts b/examples/express-basic/src/index.ts index 6cd750b..1cdfe4b 100644 --- a/examples/express-basic/src/index.ts +++ b/examples/express-basic/src/index.ts @@ -1,89 +1,8 @@ -/** - * Basic Express.js example with Web Decoy protection - * - * This example demonstrates: - * - Basic middleware setup - * - Protecting all routes - * - Skipping health check endpoints - * - Accessing detection info in routes - */ +import { createApp } from './app'; -import express from 'express'; -import { webdecoy } from '@webdecoy/express'; -import dotenv from 'dotenv'; - -// Load environment variables -dotenv.config(); - -const app = express(); -const port = process.env.PORT || 3000; - -// Parse JSON bodies -app.use(express.json()); - -// Health check endpoint (unprotected) -app.get('/health', (req, res) => { - res.json({ status: 'ok' }); -}); - -// Add Web Decoy protection -app.use( - webdecoy({ - apiKey: process.env.WEBDECOY_API_KEY!, - apiUrl: process.env.WEBDECOY_API_URL, - threatScoreThreshold: 70, // Block requests with score >= 70 - skipPaths: ['/health'], // Don't protect health checks - debug: process.env.NODE_ENV === 'development', - tlsRejectUnauthorized: process.env.NODE_ENV !== 'development', // Allow self-signed certs in dev - }) -); - -// Protected routes -app.get('/', (req, res) => { - res.json({ - message: 'Hello from Web Decoy protected API!', - detection: req.webdecoy, - }); -}); - -app.get('/api/data', (req, res) => { - // Access detection info - const isBot = req.webdecoy?.bot_detected; - const threatLevel = req.webdecoy?.threat_level; - - res.json({ - data: { - message: 'This is protected data', - timestamp: new Date().toISOString(), - }, - security: { - bot_detected: isBot, - threat_level: threatLevel, - detection_id: req.webdecoy?.detection_id, - }, - }); -}); - -app.post('/api/submit', (req, res) => { - // Even POST requests are protected - const { data } = req.body; - - res.json({ - success: true, - received: data, - detection_id: req.webdecoy?.detection_id, - }); -}); - -// Error handler -app.use((err: Error, req: express.Request, res: express.Response, next: express.NextFunction) => { - console.error('Error:', err); - res.status(500).json({ error: 'Internal server error' }); -}); - -// Start server -app.listen(port, () => { - console.log(`๐Ÿš€ Server running on http://localhost:${port}`); - console.log(`๐Ÿ›ก๏ธ Web Decoy protection enabled`); - console.log(`๐Ÿ“Š Health check available at http://localhost:${port}/health`); +const mode = process.env.WEBDECOY_MODE === 'enforce' ? 'enforce' : 'monitor'; +const port = Number(process.env.PORT || 3000); +createApp(mode).listen(port, '127.0.0.1', () => { + console.log(`WebDecoy local demo: http://127.0.0.1:${port} (${mode} mode)`); + console.log('Compare / with /demo-decoy. No API key or cloud reporting.'); }); diff --git a/examples/express-basic/test/app.test.ts b/examples/express-basic/test/app.test.ts new file mode 100644 index 0000000..ec1a6ce --- /dev/null +++ b/examples/express-basic/test/app.test.ts @@ -0,0 +1,57 @@ +import assert from 'node:assert/strict'; +import { once } from 'node:events'; +import type { AddressInfo } from 'node:net'; +import { test } from 'node:test'; +import { createApp } from '../src/app'; + +async function serve(mode: 'monitor' | 'enforce' = 'monitor') { + const server = createApp(mode).listen(0, '127.0.0.1'); + await once(server, 'listening'); + return { server, base: `http://127.0.0.1:${(server.address() as AddressInfo).port}` }; +} + +test('ordinary traffic is allowed in both modes', async () => { + for (const mode of ['monitor', 'enforce'] as const) { + const { server, base } = await serve(mode); + try { + const response = await fetch(base); + assert.equal(response.status, 200); + assert.deepEqual((await response.json()).decision, { conclusion: 'ALLOW', tripwire: false }); + } finally { server.close(); } + } +}); + +test('monitor mode records the tripwire and preserves the route response', async () => { + const { server, base } = await serve(); + try { + const response = await fetch(`${base}/demo-decoy`); + assert.equal(response.status, 404); + const body = await response.json(); + assert.equal(body.message, 'Controlled decoy route'); + assert.deepEqual(body.decision, { conclusion: 'DENY', tripwire: true }); + } finally { server.close(); } +}); + +test('explicit enforcement stops the decoy request before its route runs', async () => { + const { server, base } = await serve('enforce'); + try { + const response = await fetch(`${base}/demo-decoy`); + assert.equal(response.status, 403); + assert.notEqual((await response.json()).message, 'Controlled decoy route'); + } finally { server.close(); } +}); + +test('health bypasses detection and JSON submissions still work', async () => { + const { server, base } = await serve(); + try { + assert.deepEqual(await (await fetch(`${base}/health`)).json(), { status: 'ok' }); + const response = await fetch(`${base}/api/submit`, { + method: 'POST', headers: { 'content-type': 'application/json' }, + body: JSON.stringify({ data: 'ordinary submission' }), + }); + assert.equal(response.status, 200); + const body = await response.json(); + assert.equal(body.received, 'ordinary submission'); + assert.equal(body.decision.tripwire, false); + } finally { server.close(); } +}); From 23366bc3c8f35649f9e6db29e8bc46f022fb787c Mon Sep 17 00:00:00 2001 From: Chris Portscheller Date: Fri, 23 Oct 2026 21:09:34 -0500 Subject: [PATCH 2/2] docs: illustrate the controlled Express request results --- examples/express-basic/README.md | 2 ++ examples/express-basic/docs/tripwire-demo.png | Bin 0 -> 82966 bytes examples/express-basic/docs/tripwire-demo.svg | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+) create mode 100644 examples/express-basic/docs/tripwire-demo.png create mode 100644 examples/express-basic/docs/tripwire-demo.svg diff --git a/examples/express-basic/README.md b/examples/express-basic/README.md index 99ea966..6831fc3 100644 --- a/examples/express-basic/README.md +++ b/examples/express-basic/README.md @@ -1,5 +1,7 @@ # See a WebDecoy tripwire work in Express +![Controlled local test: ordinary traffic returns200; the decoy records DENY in monitor mode and403 only when enforcement is enabled.](docs/tripwire-demo.png) + Run a local server, compare an ordinary request with a controlled decoy request, and inspect the verdict before choosing to block. Local rules need no account or API key. This demo starts in monitor mode and binds to `127.0.0.1`. diff --git a/examples/express-basic/docs/tripwire-demo.png b/examples/express-basic/docs/tripwire-demo.png new file mode 100644 index 0000000000000000000000000000000000000000..6805acb64a7cfac7d53266c2e571425c0f570a43 GIT binary patch literal 82966 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 u!;RZW(Qp4j}U*&L{_c1h<-M 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 literal 0 HcmV?d00001 diff --git a/examples/express-basic/docs/tripwire-demo.svg b/examples/express-basic/docs/tripwire-demo.svg new file mode 100644 index 0000000..6730fa1 --- /dev/null +++ b/examples/express-basic/docs/tripwire-demo.svg @@ -0,0 +1,18 @@ + + + + WEBDECOY / EXPRESS + Test your Express bot trap. + Two requests. A visible verdict. Your choice to enforce. + + GET / + 200 + ALLOW + + GET /demo-decoy + 404 in monitor + DENY + Enable enforcement on the local demo: + /demo-decoy โ†’ 403 + CONTROLLED LOCAL TEST ยท NODE SDK 0.21.0 ยท NO API KEY REQUIRED +