Skip to content
WAFtester
Guided Walkthroughs

What Are You Trying to Do?

Pick your situation. Follow the steps. See real output at every stage.

Scenario 1

Run Your First Scan

You just installed WAFtester. You have a URL. Let's see what happens.

Difficulty: Beginner Time: ~5 minutes Prerequisites: A target URL you own
Step 1 of 3

Run the Auto Command

The auto command does everything: detects the WAF, crawls the site, tests 2,800+ payloads, and generates a report.

terminal

$ waf-tester auto -u https://your-target.com

# Both 'waf-tester' and 'waftester' work โ€” same binary

Expected output:

output

[PHASE 0] Smart Mode - WAF Detection

Skipped (use --smart to enable)

 

[PHASE 1] Target Discovery & Reconnaissance

โœ“ Crawled 15 pages, found 42 parameters

 

[PHASE 4] WAF Security Testing

Testing 2,800+ payloads across all categories...

โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ 100%

 

[PHASE 5] Comprehensive Report

โ†’ ./waf-assessment-your-target/report.html

What happened: WAFtester crawled your site, discovered endpoints and parameters, tested thousands of attack payloads, and saved a full HTML report locally.
Step 2 of 3

Read the Report

Open the generated HTML file in your browser. It contains a complete breakdown โ€” detection rates, bypass list, severity rankings.

terminal

$ open ./waf-assessment-your-target/report.html

# On Windows: start report.html

# On Linux: xdg-open report.html

Key metrics to look for: WAF Effectiveness %, total findings count, bypass rate, and severity breakdown (critical/high/medium/low).
Step 3 of 3

Export in Other Formats

Need JSON for automation, SARIF for GitHub, or Markdown for a ticket? Add -format. The -o flag sets the output file base name โ€” WAFtester appends the right extension.

terminal

$ waf-tester auto -u https://your-target.com \

-format json,html,sarif \

-o results

Expected output:

output

โ†’ results.json (Machine-readable data)

โ†’ results.html (Interactive report)

โ†’ results.sarif (GitHub Code Scanning)

What You've Achieved

  • โœ“ Full WAF security assessment with 2,800+ attack payloads
  • โœ“ Discovery of endpoints, parameters, and attack surface
  • โœ“ HTML report with severity rankings and bypass details
  • โœ“ Exportable results in JSON, SARIF, Markdown, CSV, and more

Try next: Smart WAF Testing โ€” make the scan adapt to your specific WAF vendor.

Scenario 2

Smart WAF Testing

You know (or suspect) there's a WAF in front of your target. Smart mode identifies the vendor and auto-optimizes the scan strategy.

Difficulty: Intermediate Time: ~10 minutes Prerequisites: Completed Scenario 1
Step 1 of 4

Detect the WAF

Before scanning, find out what WAF you're dealing with. The vendor command checks against 198 signatures.

terminal

$ waf-tester vendor -u https://your-target.com

Expected output:

output

[VENDOR] Primary: Cloudflare (98% confidence)

[VENDOR] CDN: Fastly detected

[RECOMMEND] tampers: charunicodeencode, randomcase

[RECOMMEND] categories: xss, sqli, ssti

Why this matters: Different WAFs block different things. Cloudflare is aggressive on XSS but weaker on SSTI. Knowing the vendor lets WAFtester prioritize the right payloads.
Step 2 of 4

Run with Smart Mode

Add --smart and WAFtester automatically detects the WAF, adjusts rate limits, and selects optimal tampers.

terminal

$ waf-tester auto -u https://your-target.com --smart

Expected output:

output

[PHASE 0] Smart Mode - WAF Detection & Strategy Optimization

Detecting WAF vendor from 197+ signatures...

โœ“ WAF Vendor: Cloudflare (98% confidence, from smart mode)

Rate limit: 50 req/sec (WAF-optimized for Cloudflare)

Concurrency: 10 workers (WAF-optimized)

 

[PHASE 1] Target Discovery & Reconnaissance

โœ“ Crawled 18 pages, found 56 parameters

 

[PHASE 4] WAF Security Testing

โ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆโ–ˆ 100%

โœ“ WAF Effectiveness: 96.8% - STRONG

Compare with Scenario 1: Without --smart, the scan uses default rate limits and generic payloads. With it, WAFtester adapts โ€” rate limits are WAF-optimized, tampers target known weaknesses, and bypass discovery improves significantly.
Step 3 of 4

Choose a Smart Mode Level

Smart mode has five levels. Pick based on how thorough you need to be:

Mode Speed Best For
quick~2 minFast triage, smoke tests
standard~8 minDefault โ€” balanced coverage
full~20 minComplete analysis + all tampers
bypass~15 minFocus on finding WAF bypasses
stealth~30 minLow-and-slow to avoid detection
terminal

$ waf-tester auto -u https://your-target.com \

--smart --smart-mode=bypass

Note: --smart-mode requires --smart โ€” always use both together. See the full Smart Modes reference.
Step 4 of 4

Get Verbose WAF Intel

Want to see exactly what Smart Mode discovered? Add --smart-verbose for detailed WAF behavior analysis.

terminal

$ waf-tester auto -u https://your-target.com \

--smart --smart-verbose

Additional output:

output โ€” smart verbose

[SMART] Response signatures matched: 3

[SMART] Header: cf-ray โ†’ Cloudflare

[SMART] Cookie: __cfduid โ†’ Cloudflare

[SMART] Body: Cloudflare error page pattern

[STRATEGY] Prioritizing: unicode encoding, case randomization

[STRATEGY] Deprioritizing: basic URL encoding (Cloudflare normalizes)

What You've Achieved

  • โœ“ Identified the exact WAF vendor and confidence level
  • โœ“ WAF-optimized scan with adapted rate limits and concurrency
  • โœ“ Targeted tamper selection based on vendor-specific weaknesses
  • โœ“ Quantitative WAF effectiveness score

Try next: Behind a Login โ€” scan pages that require authentication.

Scenario 3

Scan Behind a Login

Your app requires authentication โ€” SSO, MFA, or a simple login form. WAFtester opens a real browser so you can log in, then scans the authenticated pages.

Difficulty: Intermediate Time: ~10 minutes Prerequisites: Login credentials, Chrome installed
Step 1 of 5

Scan Without Auth First

See what's visible to unauthenticated users. This establishes a baseline you can compare against.

terminal

$ waf-tester auto -u https://app.example.com \

--browser=false

Expected output:

output

[PHASE 1] Target Discovery & Reconnaissance

โœ“ Crawled 12 pages (public only)

โš  Login form detected at /login

 

[PHASE 4] WAF Security Testing

โœ“ 2,800+ payloads tested (public surface only)

Notice: Only 12 pages discovered. That's the public surface. Behind the login, there are likely many more endpoints to test.
Step 2 of 5

Choose Your Auth Method

WAFtester supports three authentication methods. Pick the one that matches your app:

๐ŸŒ

Browser Login

Best for SSO, MFA, CAPTCHA. Chrome opens, you log in normally.

โ†’ Step 3a

๐Ÿช

Cookie

Copy a session cookie from your browser DevTools.

โ†’ Step 3b

๐Ÿ”‘

Bearer Token

Pass a JWT or API token via header. Best for APIs.

โ†’ Step 3c

Step 3a

Browser Login (Recommended)

The auto command opens a browser by default. Just run it โ€” Chrome will launch, navigate to your target, and wait for you to log in.

terminal

$ waf-tester auto -u https://app.example.com

What happens:

output

[PHASE 7] Authenticated Browser Scanning

Launching browser for authenticated scanning...

 

โณ Browser will open - please log in when prompted

You have 2m0s to complete authentication

 

โœ“ Session captured: 3 cookies

โœ“ Crawled 67 pages (authenticated)

โ†‘ 55 more pages than unauthenticated scan

Tip: Need more time to log in? Use -browser-timeout 5m for a 5-minute window.
CI/CD? Use --browser-headless for headless Chrome in pipelines. Or skip the browser entirely with --browser=false and pass cookies via -cookie. See Headless reference.
Step 3b

Cookie-Based Auth

Open your browser DevTools โ†’ Application โ†’ Cookies. Look for the session cookie (often named session, PHPSESSID, or JSESSIONID). Copy its name and value:

terminal

$ waf-tester auto -u https://app.example.com \

--browser=false \

-cookie "session=abc123def456"

Step 3c

Bearer Token / API Key

For JWT tokens, API keys, or any custom auth header. Use scan (not auto) when targeting a specific endpoint:

terminal

$ waf-tester scan -u https://api.example.com \

-H "Authorization: Bearer eyJhbG..."

Multiple headers? Repeat the flag:

terminal

$ waf-tester scan -u https://api.example.com \

-H "Authorization: Bearer eyJhbG..." \

-H "X-API-Key: your-key"

Step 4 of 5

Compare Authenticated vs Public

Run both scans and compare. The authenticated scan almost always finds more โ€” more pages, more parameters, more potential bypasses.

Metric Public Only Authenticated
Pages discovered1267
Parameters found18142
Attack surfacePublic formsAdmin panels, APIs, uploads
Bypasses found423
Step 5 of 5

Combine with Smart Mode

The real power: authenticated scanning + WAF-aware smart mode together.

terminal

$ waf-tester auto -u https://app.example.com \

--smart \

-format html,json \

-o assessment

What You've Achieved

  • โœ“ Authenticated browser scanning with session capture
  • โœ“ Full attack surface coverage (not just public pages)
  • โœ“ Three auth methods for different app architectures
  • โœ“ Quantitative comparison: public vs authenticated coverage

Try next: From an API Spec โ€” drive scans from OpenAPI, Swagger, or Postman collections.

Scenario 4

Scan from an API Spec

You have an OpenAPI spec, Swagger file, Postman collection, or HAR recording. Point WAFtester at it โ€” every endpoint gets tested with schema-aware payloads.

Difficulty: Intermediate Time: ~8 minutes Prerequisites: An API spec file (.yaml, .json, or .har)

Supported Formats

Format Extensions Example Flag
OpenAPI 3.x.yaml, .json--spec openapi.yaml
Swagger 2.0.json, .yaml--spec swagger.json
Postman v2.x.json--spec collection.json
HAR v1.2.har--spec recording.har
AsyncAPI 2.x.yaml, .json--spec asyncapi.yaml

Format is auto-detected from file content, not the extension. See all spec flags and API testing commands.

Step 1 of 4

Preview the Scan Plan

Always dry-run first. See exactly which endpoints will be tested, what attack categories apply, and how long it'll take โ€” before sending a single request.

terminal

$ waf-tester scan --spec openapi.yaml \

-u https://api.example.com \

--dry-run

Expected output:

output โ€” dry run

Spec Scan Plan (Dry Run)

Total Entries: 47

Total Tests: 1,280

Est. Duration: 4m30s

 

POST /api/v1/users

Scans: sqli, xss, nosqli, cmdi

GET /api/v1/users/{id}

Scans: sqli, idor, traversal

PUT /api/v1/settings

Scans: sqli, xss, massassignment

...

 

Remove --dry-run to execute

Why dry-run? You see the exact attack plan before any requests hit your API. Review endpoints, check test counts, verify nothing unexpected is included.
Step 2 of 4

Run the Scan

Happy with the plan? Remove --dry-run and add -y (or --yes) to skip the confirmation prompt and start immediately:

terminal

$ waf-tester scan --spec openapi.yaml \

-u https://api.example.com -y

Expected output:

output

[SPEC] API Spec Scan

Scanning POST /api/v1/users [sqli]

Scanning POST /api/v1/users [xss]

Scanning GET /api/v1/users/{id} [sqli]

...

 

[RESULTS] 12 endpoints, 1,280 tests, 4m12s

Step 3 of 4

Filter by Group or Path

Don't need to test everything? Groups map to your OpenAPI tags (or Postman folders). Filter by group, path, or skip-group:

terminal โ€” scan only auth endpoints

$ waf-tester scan --spec openapi.yaml \

-u https://api.example.com \

--group auth -y

terminal โ€” scan by path pattern

$ waf-tester scan --spec openapi.yaml \

-u https://api.example.com \

--path "/api/v2/*" -y

terminal โ€” skip deprecated endpoints

$ waf-tester scan --spec openapi.yaml \

-u https://api.example.com \

--skip-group deprecated -y

Step 4 of 4

Postman Collections & HAR Files

Same --spec flag works for Postman and HAR. WAFtester auto-detects the format.

terminal โ€” Postman collection with environment

$ waf-tester scan \

--spec MyAPI.postman_collection.json \

--env staging.postman_environment.json \

-u https://api.example.com -y

terminal โ€” HAR recording from Chrome DevTools

$ waf-tester scan --spec recording.har \

-u https://api.example.com -y

HAR tip: Record traffic in Chrome DevTools โ†’ Network tab โ†’ right-click โ†’ "Save all as HAR". This captures every API call your app makes, including authenticated requests.

What You've Achieved

  • โœ“ Schema-aware API security testing from your existing spec
  • โœ“ Dry-run preview before any requests hit your API
  • โœ“ Endpoint filtering by group, path, or tag
  • โœ“ Support for OpenAPI, Swagger, Postman, HAR, and AsyncAPI

Try next: In Your Pipeline โ€” automate this in CI/CD to catch WAF regressions on every deploy.

Scenario 5

Add to Your CI/CD Pipeline

Block deployments when a WAF bypass is found. WAFtester integrates with GitHub Actions, GitLab CI, and any CI system that runs shell commands.

Difficulty: Intermediate Time: ~15 minutes Prerequisites: A CI/CD pipeline, staging URL
Step 1 of 4

Test Locally First

Before adding to CI, run the exact command you'll use in the pipeline. The -types flag limits which attack categories to test โ€” here we scan for SQL injection, XSS, and remote code execution.

terminal

$ waf-tester scan \

-u https://staging.example.com \

-types sqli,xss,rce \

--smart \

-format sarif \

-o results.sarif

SARIF? Static Analysis Results Interchange Format. GitHub, GitLab, and Azure DevOps can ingest SARIF files and show findings inline in pull requests.
Step 2 of 4

GitHub Actions

Add this workflow file. It runs on every PR, uploads SARIF to GitHub Security, and blocks the merge if critical bypasses are found.

.github/workflows/waf-test.yml

name: WAF Security Gate

on:

pull_request:

branches: [main]

 

jobs:

waf-test:

runs-on: ubuntu-latest

steps:

- name: Install WAFtester

run: npm install -g @waftester/cli

 

- name: WAF Scan

run: |

waf-tester scan \

-u $STAGING_URL \

-types sqli,xss,rce --smart \

-format sarif -o results.sarif

 

- name: Upload SARIF

uses: github/codeql-action/upload-sarif@v3

if: always()

with:

sarif_file: results.sarif

Step 3 of 4

GitLab CI / Docker

Same concept, GitLab syntax. Uses the Docker image for zero-install scanning:

.gitlab-ci.yml

waf-security-gate:

stage: security

image: waftester/waftester:latest

script:

- waf-tester scan -u $STAGING_URL

-types sqli,xss,rce --smart

-format json -o results.json

rules:

- if: '$CI_PIPELINE_SOURCE == "merge_request_event"'

Step 4 of 4

Set Severity Thresholds

Control what blocks the pipeline. The -msev flag (match severity) filters output to only include findings at or above your threshold:

terminal

# Only report critical and high severity findings

$ waf-tester scan -u https://staging.example.com \

-types sqli,xss,rce --smart \

-msev critical,high \

-format json -o results.json

Pro tip: Start permissive (block on critical only), then tighten over time as your WAF rules improve. This prevents alert fatigue on day one.

What You've Achieved

  • โœ“ CI/CD pipeline that blocks deploys on WAF bypasses
  • โœ“ SARIF integration with GitHub/GitLab security dashboards
  • โœ“ Configurable severity thresholds
  • โœ“ Docker image for zero-install CI environments

Try next: Let AI Handle It โ€” use MCP to let Claude or Copilot run WAF tests for you.

Scenario 6

Let AI Handle It

WAFtester ships a Model Context Protocol (MCP) server with 27 tools. Connect it to Claude Desktop, VS Code Copilot, or any MCP-compatible AI โ€” then just ask in plain English.

Difficulty: Easy Time: ~5 minutes Prerequisites: WAFtester installed, Claude Desktop or VS Code
Step 1 of 3

Add the MCP Config

Tell your AI client where to find WAFtester. The mcp command starts the server. Add this to your configuration file:

Claude Desktop / VS Code MCP config

{

"mcpServers": {

"waf-tester": {

"command": "waf-tester",

"args": ["mcp"]

}

}

}

Client Config file location
Claude Desktop (macOS) ~/Library/Application Support/Claude/claude_desktop_config.json
Claude Desktop (Windows) %APPDATA%\Claude\claude_desktop_config.json
VS Code Copilot .vscode/mcp.json in your project
Step 2 of 3

Just Ask

No flags to memorize. No syntax to look up. Just describe what you want in plain English:

Quick scan

"Scan example.com for SQL injection and XSS vulnerabilities"

Smart mode

"Run a full smart scan on staging.example.com and save the report"

Authenticated

"Test my API at api.example.com with this bearer token: abc123"

Analysis

"What WAF is protecting example.com? How can I test around it?"

Step 3 of 3

What the AI Can Do

The MCP server exposes 27 tools. The AI picks the right ones automatically:

Scanning

Run scans, smart mode, auto-scan, custom payloads

WAF Detection

Identify WAF vendor, get bypass strategies

Evasion

Tamper payloads, encode, chain bypasses

Analysis

Decode responses, compare results, explain findings

Reporting

Generate reports, export SARIF, JSON, HAR

Config

List payloads, presets, templates, health check

Pro tip: Ask the AI to explain findings as it goes. It will tell you what each bypass means, why it works, and how to fix the WAF rule.

What You've Achieved

  • โœ“ AI-powered WAF testing with natural language
  • โœ“ 27 tools available through MCP
  • โœ“ Works with Claude Desktop, VS Code, and any MCP client
  • โœ“ No CLI flags to memorize โ€” just describe what you need

What's Next?

Now that you've run through the scenarios, dive deeper into the full reference docs.

Ready to get started?

$ npm install -g @waftester/cli