Maze
Inherits Reference / Object
Constants
Delivery channels a plain HTTP client can drive on its own. Anything else needs a real browser (or a driver) to place the payload.
Classification rule: classify by the injection context — where the
bytes actually land — not by what the receiving API does with a
well-formed argument. A value the server reflects raw into a JS string
literal is reflected-js however inert the function it is passed to,
because the breakout happens before that function is ever called.
dom is for flows whose taint reaches a sink through client-side code
(either from a client-side source, or from a server-reflected literal
that a live DOM sink then executes without needing a breakout).
Closed set of vuln values. "unclassified" is the default for endpoints
that have not been triaged yet — deliberately distinct from
"non-xss-control" so unreviewed and reviewed-as-safe never get conflated.
Constructors
Instance methods
Where the payload enters, e.g. "query", "fragment", "postmessage".
"server" - the payload fits in the HTTP request (query/path/body/ header/cookie/referer), so a non-browser scanner can reach it. "client" - the payload only exists browser-side (fragment, postMessage, clipboard, drag-and-drop, window.name, ...); a request-only scanner cannot deliver it at all. "unknown" - not triaged.
DOM taint sinks, e.g. "innerHTML", "eval", "location-nav", "srcdoc".
DOM taint sources, e.g. "location.hash", "postMessage", "localStorage".
Category, derived from the name prefix ("basic-level1" -> "basic").
Computed once: grouping, /map/json, /map/openapi and /stats each walk
every maze, and the old split("-").first? allocated an array per call.