説明
省略される可能性のあるリクエスト値を確認せず、プロパティ参照、メソッド呼び出し、長さの取得に使うと、例外が発生する場合があります。
想定される影響
- 攻撃者が必須パラメーターを省略し、エラー応答を発生させる可能性があります。例外処理や負荷によっては、可用性にも影響します。
- 例外の処理方法によって、内部状態やエラーの詳細が露出するおそれがあります。
対処方法
- 使用前に
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の確認だけでは型や形式まで検証できないため、必要な文字列の形式と長さも別途確認してください。