繁体   English   中英

损坏状态异常处理的可靠性

[英]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块中,通常的清理工作最终只能保留。

Finally几乎总是调用块,除了少数情况。 看到

C#“最终”阻止总是执行吗? 更多。

所以是的,保护总是在Finally调用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM