Shikata Ga Nai

Private? There is no such things.

Server-side Parameter Pollution(SSPP)の防止策 – 安全な入力処理と正規化の徹底

Hello there, ('ω')ノ

SSPP(サーバーサイドパラメータ汚染)は、ユーザー入力がそのまま内部APIや構造化データに使用されることで発生します。これを防ぐには、明確な入力制御とサニタイズ処理が不可欠です。


1. エンコーディングポリシーの厳密化

🔐 ホワイトリスト制御

  • 「許可する文字」だけを明示的に定義し、それ以外は必ずエンコード処理
  • 例:英数字、ハイフン(-)、アンダースコア(_)のみ許可など

ブラックリストはNG

  • %26(&)や %23(#)など、1つでも見落れがあるとバイパスされる危険あり

🔒 2. すべてのユーザー入力をサーバーサイドでエンコード

形式 処理方法
URLパラメータ encodeURIComponent()(JavaScript)、URLEncoder.encode()(Java)などを使用
JSON構造 JSON文字列化処理(例:JSON.stringify())を常に使用する
XML構造 エスケープ処理(<&lt; など)を必ず適用する

📌 注意:クライアント側でのエスケープではなく、サーバー側での処理が必須!


📐 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, (^^ゞ