net-scheme-allowlist
Only http(s) schemes accepted
The sections below are generated from the CLI (methodology 0.3-draft, CLI 0.3.0); the same text is printed by sealmark explain net-scheme-allowlist.
- pack
net- weight
- critical
- scope
- server (does a URL tool accept file:, ftp:, gopher:, dict: or data: URLs?)
- decided by
- responselistener
- since
- 0.2-draft (methodology 0.3-draft)
- config keys
checks.net-scheme-allowlist.corpus.addchecks.net-scheme-allowlist.corpus.removechecks.net-scheme-allowlist.enabledchecks.net-scheme-allowlist.severity
Probes
filefile:/// URL of the sandbox canary filefile-localhostfile://localhost/ URL of the sandbox canary fileftpftp:// to the listener (raw TCP)gophergopher:// to the listener (raw TCP)dictdict:// to the listener (raw TCP)datadata: URL carrying a tokenjavascriptjavascript:1 (recorded, never scored)
Settings and thresholds
Every check also takes checks.net-scheme-allowlist.enabled and checks.net-scheme-allowlist.severity; they are described once in the configuration reference.
This check has no numeric threshold.
| Key | Default | Standard | Meaning |
|---|---|---|---|
checks.net-scheme-allowlist.corpus.add | [] | locked | Extra probes for net-scheme-allowlist, validated against the pack's corpus schema. Appends across layers. Any addition makes the run CUSTOM. |
checks.net-scheme-allowlist.corpus.remove | [] | locked | Probe ids or exact strings to drop from the net-scheme-allowlist corpus. Appends across layers. Any removal makes the run CUSTOM. |
How the verdict is established
- Scoring. critical and scored: pass = 1 point, part = 0.5, fail = 0. A fail caps the pack's grade at D, whatever the other checks scored.
What to fix
Accept only http and https and reject every other scheme (file:, ftp:, gopher: and so on) before the request is made, and say that the scheme was the reason: a refusal that names only the host explains nothing about the scheme and leaves the check inconclusive unless the tool was shown to fetch. A data: URL that the tool decodes (the token appears outside any URL-shaped text) is a pass-through of the content, not a refusal.
False positives
A tool documented to read local files through file: URLs fails by design.
False negatives
A scheme that is unsupported by the server's HTTP library passes trivially (recorded, not a defence). A pass needs at least one probe refused for its scheme or a tool shown to fetch: a refusal by a host guard says nothing about the scheme, so a tool with only those refusals is inconclusive. Schemes outside the corpus are not tried. A data: URL counts as accepted when the decoded token comes back in the reply outside any URL-shaped text (an echo of the probe inside a URL or a percent-encoded slug is not a decode), when the reply is an embedded resource (a blob the harness cannot read as text), or when a tool already shown to fetch answers it without refusing; a server that decodes it and replies with a summary that says nothing of the content is not seen.