# Input Validation

> A mechanism that checks external input against a schema at the boundary before core logic uses it.

Record: `architecture:input-validation`
Kind: mechanism
Layer: [Security Core](https://banes-lab.com/records/layer/security-core.md)
Severity: mandatory
Scope: API, boundary, function
Canonical: https://banes-lab.com/ontology#architecture-input-validation

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [ABAC](https://banes-lab.com/records/architecture/attribute-based-access-control.md) and before [Output Encoding](https://banes-lab.com/records/architecture/output-encoding.md).

## Repair

- Refactored by: Add Validator, Add Schema
- Detected by: missing boundary validators
- Violated by: raw external data entering core logic
- Measured by: validation coverage
- Enforced by: validation middleware, [tests](https://banes-lab.com/records/lexicon/tests.md)

## Requires

- [Validation Rules](https://banes-lab.com/records/lexicon/validation-rules.md)
- [Schema](https://banes-lab.com/records/lexicon/schema.md)

## Reinforces

- [Security](https://banes-lab.com/records/lexicon/security.md)
- [Correctness](https://banes-lab.com/records/architecture/correctness.md)

## Enables

- [Fail Fast](https://banes-lab.com/records/architecture/fail-fast.md)

## Conflicts with

- [Trusting External Input](https://banes-lab.com/records/lexicon/trusting-external-input.md)

## In tension with

- [Input Flexibility](https://banes-lab.com/records/lexicon/input-flexibility.md)

## Tensions

- [Input Validation / Input Flexibility](https://banes-lab.com/records/tension/input-flexibility-input-validation.md)

## Contracts

- [Boundary Validation Over Unvalidated Input](https://banes-lab.com/records/algorithms/no-unvalidated-input.md)

## Severity

- [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)

## Category

- [Security / Privacy / Compliance / Governance](https://banes-lab.com/records/architecture-category/security-privacy-compliance-governance.md)

## Required by

- [Preconditions](https://banes-lab.com/records/architecture/preconditions.md)
- [Defensive Programming](https://banes-lab.com/records/architecture/defensive-programming.md)

## Reinforced by

- [Parameterized Queries](https://banes-lab.com/records/architecture/parameterized-queries.md)

## Linked from

- [Systems built around a model](https://banes-lab.com/software-architecture/scale/systems-built-around-a-model.md)
- [Contracts / Interfaces / Compatibility](https://banes-lab.com/ontology/principles/architecture-category-contracts-interfaces-compatibility.md)
- [Correctness / Determinism / Verification](https://banes-lab.com/ontology/principles/architecture-category-correctness-determinism-verification.md)
- [Error Handling / Resilience](https://banes-lab.com/ontology/principles/architecture-category-error-handling-resilience.md)
- [Security / Privacy / Compliance / Governance](https://banes-lab.com/ontology/principles/architecture-category-security-privacy-compliance-governance.md)
- [Core Vocabulary](https://banes-lab.com/ontology/lexicon/lexicon-category-core-vocabulary.md)
- [Quality Attributes](https://banes-lab.com/ontology/lexicon/lexicon-category-quality-attributes.md)
- [Security Privacy Compliance](https://banes-lab.com/ontology/lexicon/lexicon-category-security-privacy-compliance.md)
- [Architectural Rules](https://banes-lab.com/ontology/algorithms/algorithms-domain-architectural-rules.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)
