入力バリデーション

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

セキュリティ設計

入力バリデーションとは

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

バリデーションの原則

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

バリデーションの層

バリデーションの層を図で示す。

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

よくあるバリデーション

よくあるバリデーションを以下にまとめる。

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

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

バリデーションのアンチパターンを以下にまとめる。

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

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

この記事は役に立ちましたか?

関連用語

関連する記事