確認前のリクエスト値の参照

確認前のリクエスト値の参照

説明

省略される可能性のあるリクエスト値を確認せず、プロパティ参照、メソッド呼び出し、長さの取得に使うと、例外が発生する場合があります。

想定される影響

  • 攻撃者が必須パラメーターを省略し、エラー応答を発生させる可能性があります。例外処理や負荷によっては、可用性にも影響します。
  • 例外の処理方法によって、内部状態やエラーの詳細が露出するおそれがあります。

対処方法

  • 使用前に value != null、スキーマ検証、適切な既定値などでリクエスト値を確認してください。
  • 検証層で必須の値を定義し、省略された場合は明確なエラーを返してください。

例

Express 5のルートの抜粋です。このバージョンの res.send(number) は、数値をJSONとして返します。

変更前

javascript
app.get("/length", (req, res) => {
  const id = req.query.id;
  res.send(id.length);
});

変更後

javascript
app.get("/length", (req, res) => {
  const id = req.query.id;
  if (id == null) {
    return res.status(400).end();
  }
  res.send(id.length);
});

解説:

  • 変更前: req.query.id や req.body.name などの省略可能な値で、確認せずにプロパティ参照やメソッド呼び出しを行うと、例外が起こる可能性があります。
  • 変更後: 値がなければ400を返し、長さを取得しません。nullの確認だけでは型や形式まで検証できないため、必要な文字列の形式と長さも別途確認してください。

参考資料