Input Validation Coverage Calculator
Measure weighted input validation coverage across your parameters and estimate the injection findings still waiting in the gaps.
Inputs
Client-only validation is worth roughly 40% of the score
Weighted Validation Coverage
53.0%
Coverage Grade
D — Weak
Parameters Without Allow-List Validation
270
Expected Injection Findings
32.4
Weakest Validation Control
Fuzz or property test coverage
Residual Exposure
47.0%
Step by step
Values used
Input parameters in scope = 480 parameters; Parameters with allow-list validation = 210 parameters; Parameters with type or schema validation = 400 parameters; Parameters with length or range bounds = 330 parameters; Parameters canonicalised before validation = 150 parameters; Parameters covered by fuzz or property tests = 90 parameters; Validation enforced server-side, not only in the client = Yes; Injection findings per 100 unvalidated parameters = 12 findings
Input Validation Coverage
coverage = 0.35 × allow-list coverage + 0.25 × schema coverage + 0.15 × bounds coverage + 0.15 × canonicalisation coverage + 0.10 × fuzz coverage, each expressed as a percentage of parameters in scope.
Expected findings
expected findings = unvalidated parameters × findings per 100 unvalidated parameters ÷ 100; client-only validation scales the whole score to 40%.
Weighted Validation Coverage
= 53.0
Coverage Grade
= D — Weak
Parameters Without Allow-List Validation
= 270
Expected Injection Findings
= 32.4
Weakest Validation Control
= Fuzz or property test coverage
Residual Exposure
= 47.0
How it works
Allow-list validation carries the most weight because it is the only control that rejects the unexpected rather than trying to enumerate the dangerous, and canonicalisation is weighted alongside it because a check performed before decoding can be bypassed. Client-side-only validation is scaled to 40% since it is a usability feature, not a control. Coverage is the number that predicts your next injection finding: the parameters nobody validated are the parameters the next test will break, and this turns that into a count you can plan against.
Formulas
Input Validation Coverage
coverage = 0.35 × allow-list coverage + 0.25 × schema coverage + 0.15 × bounds coverage + 0.15 × canonicalisation coverage + 0.10 × fuzz coverage, each expressed as a percentage of parameters in scope.
- allow-list coverage
- Share of parameters checked against a positive pattern
- canonicalisation coverage
- Share decoded and normalised before checking
Expected findings
expected findings = unvalidated parameters × findings per 100 unvalidated parameters ÷ 100; client-only validation scales the whole score to 40%.
- unvalidated parameters
- Parameters with no allow-list validation
- findings per 100
- Your historical yield from testing
Frequently Asked Questions
How is Input Validation Coverage calculated?
coverage = 0.35 × allow-list coverage + 0.25 × schema coverage + 0.15 × bounds coverage + 0.15 × canonicalisation coverage + 0.10 × fuzz coverage, each expressed as a percentage of parameters in scope. Allow-list validation carries the most weight because it is the only control that rejects the unexpected rather than trying to enumerate the dangerous, and canonicalisation is weighted alongside it because a check performed before decoding can be bypassed. Client-side-only validation is scaled to 40% since it is a usability feature, not a control.
Why does Input Validation Coverage matter?
Coverage is the number that predicts your next injection finding: the parameters nobody validated are the parameters the next test will break, and this turns that into a count you can plan against.
What values do I need to enter?
This calculator takes 8 inputs: Input parameters in scope, Parameters with allow-list validation, Parameters with type or schema validation, Parameters with length or range bounds, Parameters canonicalised before validation, Parameters covered by fuzz or property tests, Validation enforced server-side, not only in the client, Injection findings per 100 unvalidated parameters. The pre-filled defaults are a realistic starting point — replace them with figures from your own environment for a result you can act on.
Is schema validation the same as allow-list validation?
No, and the gap is where bugs live. A schema proves a field is a string of at most 64 characters; an allow-list proves it matches the format that field is actually allowed to take. JSON Schema plus a per-field pattern gets you both, and the pattern is the part that stops injection.
You might also need
- Output Encoding CalculatorCommonly used together
- Path Traversal Risk CalculatorCommonly used together
- Command Injection Risk CalculatorCommonly used together
- File Upload Risk CalculatorCommonly used together
- SQL Injection Risk CalculatorCommonly used together
- Web Application Security Score CalculatorCommonly used together