入力バリデーション
ユーザー入力を検証し、不正なデータがシステムに入り込むのを防ぐセキュリティの基本
セキュリティ設計
入力バリデーションとは
入力バリデーションは、ユーザー入力を検証し、不正なデータがシステムに入り込むのを防ぐセキュリティの基本である。SQL インジェクション、XSS、バッファオーバーフローの多くは、入力バリデーションの欠如が原因。
バリデーションの原則
許可する値を定義する許可リスト (ホワイトリスト) 方式が推奨で、禁止する値を定義する拒否リスト (ブラックリスト) 方式は不十分だ。クライアントの検証は回避可能なため、必ずサーバーサイドで検証する。不正な入力は即座に拒否し、早期に失敗させる。
バリデーションの層
クライアント (UX 向上)
↓ フォームバリデーション (即座にフィードバック)
API Gateway (スキーマ検証)
↓ リクエストバリデーター
Lambda (ビジネスルール)
↓ Zod, Joi 等でバリデーション
DynamoDB (制約)
↓ 条件付き書き込み
よくあるバリデーション
| フィールド | バリデーション |
|---|---|
| メールアドレス | 形式チェック、長さ制限 |
| パスワード | 最小長、複雑さ |
| 数値 | 範囲チェック、整数チェック |
| 文字列 | 長さ制限、許可文字 |
| URL | 形式チェック、プロトコル制限 |
| ファイル | サイズ、MIME タイプ |
バリデーションのアンチパターン
| アンチパターン | 問題 |
|---|---|
| クライアントのみで検証 | サーバーに直接リクエスト可能 |
| 拒否リストのみ | 新しい攻撃パターンを見逃す |
| エラーメッセージに詳細を含む | 攻撃者に情報を与える |
| バリデーションの重複 | 共通ライブラリで一元化する |
入力バリデーションの背景や設計思想は関連書籍に詳しい。