[英]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.