入力バリデーション

ユーザー入力を検証し、不正なデータがシステムに入り込むのを防ぐセキュリティの基本

セキュリティ設計

入力バリデーションとは

入力バリデーションは、ユーザー入力を検証し、不正なデータがシステムに入り込むのを防ぐセキュリティの基本である。SQL インジェクション、XSS、バッファオーバーフローの多くは、入力バリデーションの欠如が原因。

バリデーションの原則

許可する値を定義する許可リスト (ホワイトリスト) 方式が推奨で、禁止する値を定義する拒否リスト (ブラックリスト) 方式は不十分だ。クライアントの検証は回避可能なため、必ずサーバーサイドで検証する。不正な入力は即座に拒否し、早期に失敗させる。

バリデーションの層

クライアント (UX 向上)
  ↓ フォームバリデーション (即座にフィードバック)
API Gateway (スキーマ検証)
  ↓ リクエストバリデーター
Lambda (ビジネスルール)
  ↓ Zod, Joi 等でバリデーション
DynamoDB (制約)
  ↓ 条件付き書き込み

よくあるバリデーション

フィールド バリデーション
メールアドレス 形式チェック、長さ制限
パスワード 最小長、複雑さ
数値 範囲チェック、整数チェック
文字列 長さ制限、許可文字
URL 形式チェック、プロトコル制限
ファイル サイズ、MIME タイプ

バリデーションのアンチパターン

アンチパターン 問題
クライアントのみで検証 サーバーに直接リクエスト可能
拒否リストのみ 新しい攻撃パターンを見逃す
エラーメッセージに詳細を含む 攻撃者に情報を与える
バリデーションの重複 共通ライブラリで一元化する

入力バリデーションの背景や設計思想は関連書籍に詳しい。

関連用語