入力バリデーションとインジェクション対策
このドキュメントの目的
Webアプリケーションにおける入力バリデーションの重要性と、インジェクション攻撃への対策を学びます。
入力バリデーションの原則
基本原則
1. すべての入力を信頼しない
- ユーザー入力
- APIパラ メータ
- HTTPヘッダー
- Cookie
- 外部システムからのデータ
2. ホワイトリスト方式
- 許可するパターンを定義
- それ以外は拒否
3. サーバーサイドで必ず検証
- クライアントサイド検証はUX向上のみ
- セキュリティ対策にはならない
4. 入力と出力の両方で対策
- 入力: バリデーション
- 出力: エスケープ/エンコード
アプリケーション特性と攻撃リスク
アプリケーションの機能や特性によって、発生しやすい攻撃が異なる。
┌─────────────────────────────────────────────────────────────────────┐
│ アプリケーション特性 発生しやすい攻撃 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ユーザー投稿機能がある XSS │
│ (コメント、レビュー、プロフィール) └─ 投稿内容にスクリプトを埋め込む │
│ │
│ 検索・フィルタ機能がある SQLインジェクション │
│ (商品検索、ユーザー検索) └─ 検索条件にSQL構文を注入 │
│ │
│ ファイル操作機能がある コマンドインジェクション │
│ (ファイル変換、画像処理) └─ ファイル名にコマンドを注入 │
│ │
│ Active Directory連携 LDAPインジェク ション │
│ (企業向けSSO、社内システム) └─ ユーザー名にLDAP構文を注入 │
│ │
└─────────────────────────────────────────────────────────────────────┘
| アプリ例 | 注意すべき攻撃 | 理由 |
|---|---|---|
| ECサイト | SQL, XSS | 商品検索、レビュー投稿機能 |
| SNS・掲示板 | XSS | ユーザー投稿が多い |
| 社内業務システム | LDAP, SQL | AD連携、複雑な検索機能 |
| 画像変換サービス | コマンド | 外部ツール呼び出し |
→ 自分のアプリがどの特性を持つか確認し、該当する攻撃を重点的に対策する