All notable changes to Dalfox are recorded here. The format follows Keep a Changelog, and the project follows Semantic Versioning.
The previous Go implementation lives on the v2 branch
and continues to receive security backports per SECURITY.md.
Mass-scan workflow features, wider DOM-XSS coverage, and CSP / false-positive fixes.
--state-file: resume an interrupted mass scan, skipping completed targets (#1275).--baseline: report only findings new since a previous run (#1279).--dedup-urls: signature-level target deduplication for large URL lists (#1278).- Session-loss detection: warn when auth dies mid-scan instead of reporting zero findings (#1277, #1285).
- New DOM-XSS sinks: drag-drop, async clipboard,
FileReader,setAttributeNS, indirecteval,DOMParser(#1257, #1258). - HTTP
QUERYmethod support (RFC 10008) (#1220). - MCP:
max_payloads_per_paramand a synchronous wait mode (#1223). - More
dalfox payloadselectors (special chars, functions, awesome-alert, ...) (#1271). - Findings now carry separate confidence / detection-method / impact axes (#1246).
- CSP analysis:
default-srcno longer overridesscript-src, wildcard origins match deeper subdomains, and enforcing<meta>policies win over report-only (#1266, #1267, #1268). - No more verified
[V]for HTML-tag echoes inapplication/javascriptbodies (#1286). - Absent multipart params are now injected, and empty JSON body values no longer garble the request (#1260, #1261, #1263).
- SARIF output emits a matching rule and correct
ruleIndexper finding CWE (#1262). - Config files are validated, and an explicit CLI flag now beats a config value even when it equals the default (#1228, #1270, #1280).
- Server / MCP: validated
method/encodersat the API boundary, deterministic scan listing order, and an honestcancelledresponse (#1269, #1264, #1237, #1229). --deep-scanruns the preflight probe again,--limit-result-typeno longer hides the findings it limited on, and-ireads every file argument (#1212).- Honest redirect evidence, working
--sxssdiscovery, bare-pseeding when discovery is skipped, and no stdin hang when a target is given (#1242, #1221, #1241). - WAF: sink keywords match on identifier boundaries, and blocking statuses boost confidence even with an empty body (#1259, #1265).
- Windows binary no longer overflows the main thread stack at startup (#1294).
- One shared HTML parse per AST DOM phase (#1256).
- Korean translation and a redesigned docs site (#1224, #1230).
- Documented the R/V/A detection model across every surface (#1255).
- Reject non-
http(s)URL schemes instead of mangling them into malformed targets. - Suppressed false
[R]for inertjavascript:reflections and false[V]foron*on hidden inputs (#1183). - Resource-safety, REST / MCP parity, and hot-path performance fixes in the async scan front-ends (#1190).
- Bounded query-discovery memory during parameter mining.
- Documentation accuracy fixes across
--scan-timeout, MCP encoders,serverflags, and WAF values.
- Unified the scan target parameter on
targetfor server / MCP (urlkept as a REST alias) (#1152). - Unified debug logging through a single stderr macro and structured server / MCP loggers.
- Restored reflected-XSS recall in raw-JS-expression and regex-literal contexts (#1161).
- Demoted inert URL-scheme and
javascript:self-link reflections (#1153). url/file/pipenow apply config files, global flags, and an explicit-i.--outputwrite failures report via stderr and a non-zero exit code.- Bounded request fan-out with a per-parameter payload cap and DOM-phase early exit (#1155, #1156).
A feature release: out-of-band XSS, external / modern DOM-sink analysis, CSP awareness, HAR input, and rate limiting.
--blind-oob: out-of-band (blind) XSS detection via an interactsh server. CLI-only.--analyze-external-js: fetches same-origin<script src>bundles and runs them through AST DOM-XSS analysis (#1094).--detect-outdated-libs: flags known-vulnerable front-end library versions (#1074).--input-type har: accepts a HAR / proxy export as a scan source (#1095).--rate-limit: a requests-per-second token bucket shared across all workers and targets (#1096).--retries/--retry-delay: opt-in exponential-backoff retries for 5xx and transient transport errors.--insecure: configurable TLS certificate validation (#1111).- CSP / Trusted Types awareness, filter-aware JS breakout synthesis, and attribute-decode WAF-bypass mutations.
- Wider DOM-XSS coverage (
Document.parseHTMLUnsafe(),window.open(), more JS sink names). scan_timeoutfor server / MCP jobs, and scanmetain SARIF / Markdown / TOML output.
--waf-evasionnow uses randomized jitter and an escalating cooldown instead of a fixed slow preset.- Refactored the REST server into a dedicated subsystem with an extracted job domain.
- Cut reflected-XSS false positives with ~31% fewer requests (#1117).
- Require a payload's handler/sink to survive on the marker element before verifying
[V](#1118). - Clear DOM taint on sanitized reassignment, removing a class of DOM-XSS false positives (#1087).
--encodersacceptshtmlpad,unicode, andzwsp;--blind-oobno longer swallows the target URL.- Parse-DoS hardening against deeply nested hostile JS, plus closed xssmaze WAF-facade gaps.
- Capped body reads and reflection-scan work to prevent OOM and hangs on hostile responses.
- REST responses set an explicit
Content-Typewithnosniff; the server warns on non-loopback binds without auth. - Fixed a per-job scope leak and added rate-limit / concurrency caps for server and MCP scans.
- Switched the rustls backend to
ring, fixing source builds (AUR,cargo install, musl). - Repaired
.deb/.rpmgeneration and the release matrix, which had dropped most v3.0.1 artifacts. - Hardened the docs site: self-hosted assets,
robots.txt,security.txt, and a tighter CSP.
- DOM-XSS coverage for jQuery selector-to-HTML sinks, dynamic
import(), andfetch()/ XHR sources. - NetScaler and cookie-based WAF fingerprints; orthogonal bypass expansion to avoid combinatorial blow-up.
- Native
.deb/.rpmpackages, musl binaries, and Snapcraft / AUR distribution. - Explicit
-p/-dtargets are always tested, regardless of--skip-*flags (XSSMaze 92.7% → 98.2%). - Workers shut down gracefully instead of panicking on a closed semaphore.
Dalfox v3 is a complete rewrite in Rust, replacing the legacy Go implementation (now on the v2 branch) with an asynchronous architecture and a modern CLI structure.
- AST-based JS analysis:
oxc-powered static analysis for DOM-XSS, replacing headless browsers. - MCP server (
dalfox mcp): exposes Dalfox tools to AI coding assistants over stdio. - Async REST API server:
axumwith job queueing, cancellation, and webhook notifications. - TOML / JSON config files, plus
markdown,sarif, andtomloutput formats. --dry-run,--stream-findings,--max-payloads-per-param, and--scan-timeout.
- All target paths consolidated under a single
scansubcommand (url/file/pipekept as aliases). - Standardized exit codes (
0clean,1findings,2errors) for CI integration. - Per-target progress bars, with banners suppressed for machine-readable modes.
- The Chromium /
chromedpheadless engine and all headless-related flags. - Legacy non-XSS checkers (BAV), to focus strictly on XSS.
--found-action,--grep,--report, and--max-cpu.
- Constant-time API key comparison and strict JSONP callback validation in the REST server.
- Excluded local cookie file loaders (
--cookie-from-raw) from the MCP tool interface. - Panic isolation (
catch_unwind) to prevent scanner and MCP thread crashes.