[英]Reliability of corrupted state exception handling
我目前正在研究C# / .NET的可靠性功能和异常处理
这些特别是HandleProcessCorruptedStateExceptions
属性和带有PrepareConstrainedRegions
CER 。
现在我正在阅读SecureString
类的参考源代码,因为这是一个非常安全的地方,即使在特殊情况下也保持数据加密,并找到类似这样的地方:
[HandleProcessCorruptedStateExceptions]
//...
RuntimeHelpers.PrepareConstrainedRegions();
try
{
Unprotect();
// ...
}
catch(Exception)
{
Protect();
throw;
}
finally
{
Protect();
// ...
}
catch
块的原因是什么? finally
块不足以重新保护数据吗?
或者那些损坏的状态异常是否只影响catch
并在之后终止应用程序?
由于异常过滤功能中的安全漏洞(不是由C#提供,但Visual Basic和其他人提供),因此需要在catch块中进行代码重复。 它允许恶意用户在捕获异常之后和最终执行块之前在try-catch-finally块中执行其代码。
威胁看起来像这样:你的库的Visual Basic用户在Unprotect()之后导致异常(即使OutOfMemoryException因内存不足而发生),CLR找不到catch块,然后CLR执行用户的异常过滤器代码,此代码窃取Unprotect() - ed数据,然后只有CLR在finally块中执行Protect()。
因此,将安全清理代码放入catch和finally块中,通常的清理工作最终只能保留。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.