# 入力の検証（バリデーション）— 外から来た値を疑う

> レベル: 初級 ／ 対象: 大人
> 出典: Kotowary — https://kotowary.com/learn/units/input-validation?level=beginner&audience=adult
Webの守りの土台が、**入力の検証**。「外から来た値を、そのまま使わずに確かめる」ことです。

## なぜ必要？

ブラウザから届く値・URLのパラメータ・アップロードされるファイル——これらは**攻撃者が自由に作れる**ものです。そのまま使うと、XSSやSQLインジェクションなどの穴になります。だから、まず疑って確かめます。

## どう確かめる？

1. **型** — 数値のはずが文字列でないか
2. **範囲・長さ** — 想定の範囲に収まっているか（年齢が -1 や 9999 でないか）
3. **形式** — メールの形、日付の形など
4. **許可リスト** — 「許可するものだけ通す」（危ないものを列挙するより安全）

入力検証は、外から来た値を確かめる「**関所**」です。通ったものだけ処理へ進み、怪しいものは弾きます。

::diagram{name="validation-gate"}

そして最重要は、**サーバ側で必ずやる**こと。フロントのチェックは利用者への親切であって、防御ではありません。

## ⚠️ 気をつける

- **フロントだけで検証** — 直接サーバへ送られたら素通り
- **拒否リスト頼み** — 危ないものを列挙する方式は抜けが出る
- **検証と無害化の混同** — 検証（弾く）と、出力時のエスケープ（無害化）は別の対策。両方要る
