Hello there, ('ω')ノ
SSPP(サーバーサイドパラメータ汚染)は、ユーザー入力がそのまま内部APIや構造化データに使用されることで発生します。これを防ぐには、明確な入力制御とサニタイズ処理が不可欠です。
✅ 1. エンコーディングポリシーの厳密化
🔐 ホワイトリスト制御
- 「許可する文字」だけを明示的に定義し、それ以外は必ずエンコード処理
- 例:英数字、ハイフン(-)、アンダースコア(_)のみ許可など
❌ ブラックリストはNG
%26
(&)や%23
(#)など、1つでも見落れがあるとバイパスされる危険あり
🔒 2. すべてのユーザー入力をサーバーサイドでエンコード
形式 | 処理方法 |
---|---|
URLパラメータ | encodeURIComponent() (JavaScript)、URLEncoder.encode() (Java)などを使用 |
JSON構造 | JSON文字列化処理(例:JSON.stringify() )を常に使用する |
XML構造 | エスケープ処理(< → < など)を必ず適用する |
📌 注意:クライアント側でのエスケープではなく、サーバー側での処理が必須!
📐 3. 入力のフォーマットと構造の検証(スキーマバリデーション)
- JSON/XMLリクエストに対しては、スキーマ検証を使って構造を強制
- 型、必須フィールド、許容される値の範囲などを制限
✅ 例:JSONスキーマ(簡易)
{ "type": "object", "properties": { "name": { "type": "string" } }, "required": ["name"], "additionalProperties": false }
→ name
以外のフィールドが入っていたらリクエストを拒否できる!
🚫 4. パス構造やクエリの正規化処理
../
,%2e%2e
,%2f
などのパストラバーサル記法をサーバー側で検出・拒否- 重複パラメータは 最初の値だけを採用 するなどの統一ルールを設ける
🧠 まとめ:SSPP防止のためのセキュリティ対策一覧
項目 | 内容 |
---|---|
ホワイトリスト制御 | 許可された文字だけを通す(例:a-z, 0-9) |
サーバー側でのエンコーディング | ユーザー入力はそのまま使わず、安全な形式に変換 |
JSON/XML構造のスキーマバリデーション | 不正なフィールドを弾くことでインジェクションを防止 |
パス・クエリの正規化と検証 | トラバーサルやパラメータ汚染を検出・拒否 |
SSPPは「目に見えない裏側」で起きる脆弱性ですが、“入力を信頼しない”というセキュリティの基本に忠実であれば、十分に防ぐことができます。
設計・開発時から、すべての入力を制御・検証・エンコードするという意識を徹底しましょう。
Best regards, (^^ゞ