不良的错误处理:空的 catch 块¶
ID: cs/empty-catch-block
Kind: problem
Security severity:
Severity: recommendation
Precision: very-high
Tags:
- reliability
- readability
- exceptions
- external/cwe/cwe-390
- external/cwe/cwe-391
Query suites:
- csharp-security-and-quality.qls
在某些语言中,空的 catch 块在某些罕见情况下可能是可以接受的,例如,当保证不会引发已检查的异常时。C# 没有已检查的异常,因此任何空的 catch 块通常都是错误或不良做法的实例。
忽略应该以某种方式处理的异常几乎总是一个非常糟糕的主意。如果忽略异常,攻击者可能会在程序中引入意外行为。
建议¶
确保正确处理所有异常。
示例¶
在这个伪代码示例中,如果程序无法降低权限,它将继续以相同的权限运行。
class EmptyCatchBlock
{
public static void Main(string[] args)
{
// ...
try
{
SecurityManager.dropPrivileges();
}
catch (PrivilegeDropFailedException e)
{
}
// ...
}
}