EXC.BROADTHROWS
メソッドは、抽象レベルに適した例外をスローする必要があります。メソッドが、Exception や Throwable のように概略的過ぎる例外をスローする場合、呼び出し側が正しくエラーを処理し、適切なエラー回復を実行することは困難です。
脆弱性とリスク
メソッドが概略的過ぎる例外をスローする場合、呼び出し側は、適切な処置ができるように、発生した問題の種類を調査する必要があります。また、メソッドコードが変更され、新規の例外が導入された場合には、すべての呼び出し側に適切な処理を迫るのはさらに困難です。
軽減と防止
メソッドは、抽象レベルに適した例外をスローする必要があります。必要に応じて、低レベルの例外を高レベルの例外にラップしてください。
例 1
コピー
public void processFile(String fileName) throws Exception {
InputStream is = new FileInputStream(fileName);
// do something
}
public int calculateSum(Collection data) throws Throwable {
int sum = 0;
for (Iterator it = data.iterator(); it.hasNext();) {
String element = (String) it.next();
int i = Integer.parseInt(element);
sum += i;
}
return sum;
}
EXC.BROADTHROWS が 15 行目のメソッド 'processFile' の宣言に対して報告されています。'processFile' メソッドは、汎用的な例外 'java.lang.Exception' をスローします。
EXC.BROADTHROWS が 19 行目のメソッド 'calculateSum' の宣言に対して報告されています。'calculateSum' メソッドは、汎用的な例外 'java.lang.Throwable' をスローします。
外部参考資料
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。