簡體   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