更新 : 2007 年 11 月
TypeName |
WrapVulnerableFinallyClausesInOuterTry |
CheckId |
CA2124 |
カテゴリ |
Microsoft.Security |
互換性に影響する変更点 |
なし |
原因
パブリック メソッドまたはプロテクト メソッドに try/finally ブロックが含まれています。セキュリティの状態をリセットすると見られる finally ブロックが finally ブロックに含まれていません。
規則の説明
この規則は、コール スタックに悪意のある例外フィルタが存在する場合に、脆弱性が考えられる try/finally ブロックの位置を特定します。偽装など、注意が必要な操作が try ブロックで発生して例外がスローされると、finally ブロックの前にフィルタが実行される可能性があります。たとえば偽装の場合、フィルタは偽装されたユーザーとして実行されます。現在のところ、フィルタは Visual Basic でのみ実装できます。
違反の修正方法
ラップされていない try/finally の外側を try ブロックで囲みます。以下の 2 つ目の例を参照してください。これで、フィルタ コードの前に finally が強制的に実行されます。
警告を抑制する状況
この規則による警告は抑制しないでください。
擬似コードの例
説明
次の擬似コードに、この規則で検出されるパターンを示します。
コード
try {
// Do some work.
Impersonator imp = new Impersonator("John Doe");
imp.AddToCreditCardBalance(100);
}
finally {
// Reset security state.
imp.Revert();
}
使用例
次の擬似コードに、コードを保護でき、この規則にも適合するパターンを示します。
try {
try {
// Do some work.
}
finally {
// Reset security state.
}
}
catch()
{
throw;
}