gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 18:01:37 25 4
gpt4 key购买 nike

我目前正在研究 C#/.NET 的可靠性特性和异常处理

这些尤其是 HandleProcessCorruptedStateExceptions属性和 CERPrepareConstrainedRegions

现在我正在阅读 SecureString 类的引用源代码,因为这是一个非常安全的地方,即使在特殊情况下也要保持数据加密,并找到类似这样的地方:

[HandleProcessCorruptedStateExceptions]
//...

RuntimeHelpers.PrepareConstrainedRegions();
try
{
Unprotect();
// ...
}
catch(Exception)
{
Protect();
throw;
}
finally
{
Protect();
// ...
}

catch block 的原因是什么? finally block 是否足以重新保护数据?

或者那些损坏的状态异常是否只会影响catch 并随后终止应用程序?

最佳答案

由于异常过滤功能(C# 不提供,但 Visual Basic 和其他软件提供)中的安全漏洞,需要在 catch block 中重复代码。它允许恶意用户在您的 try-catch-finally block 中执行他们的代码,在捕获异常之后和执行 finally block 之前。

威胁看起来是这样的:您的库的 Visual Basic 用户在 Unprotect() 之后导致异常(甚至内存不足导致的 OutOfMemoryException),CLR 没有找到 catch block ,然后 CLR 执行用户的异常过滤器代码,这段代码窃取了 Unprotect() -ed 数据,然后 CLR 才在 finally block 中执行 Protect()。

因此,将安全清理代码放在 catch 和 finally block 中,通常的清理只留在 finally 中。

关于c# - 损坏状态异常处理的可靠性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8973449/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com