更新:2007 年 11 月
TypeName |
WrapVulnerableFinallyClausesInOuterTry |
CheckId |
CA2124 |
类别 |
Microsoft.Security |
是否重大更改 |
否 |
原因
公共方法或受保护方法包含 try/finally 块。该 finally 块似乎要重置安全性状态,并且没有包括在 finally 块中。
规则说明
此规则定位容易受调用堆栈中恶意异常筛选器攻击的 try/finally 块。如果敏感操作(如模拟)出现在 try 块中,将引发异常,筛选器可以在 finally 块之前执行。对于模拟示例,这意味着筛选器将作为被模拟用户执行。筛选器当前只能在 Visual Basic 中实现。
如何修复冲突
将未包装的 try/finally 放入外部 try 块中。请参见后面的第二个示例。这将强制 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;
}