共用方式為


必須將有弱點的 finally 子句包裝在外層 try 中

更新:2007 年 11 月

型別名稱

WrapVulnerableFinallyClausesInOuterTry

CheckId

CA2124

分類

Microsoft.Security

中斷變更

非中斷

原因

公用 (Public) 或保護的 (Protected) 的方法包含 try/finally 區塊。finally 區塊似乎會重設安全性狀態,而且不會封入 finally 區塊中。

規則描述

這項規則會尋找 try/finally 區塊,這些區塊可能很容易遭受呼叫堆疊中出現之惡意例外狀況 (Exception) 篩選條件的攻擊。如果在 try 區塊中發生敏感作業 (例如模擬) 並且擲回例外狀況,則可以在 finally 區塊之前執行篩選條件。若是模擬範例,則表示篩選條件會以模擬的使用者執行。篩選條件目前只能在 Visual Basic 中實作。

如何修正違規

請將未包裝的 try/finally 放置在外層 try 區塊中。請參閱以下的第二個範例。這會強制 finally 在篩選程式碼之前先執行。

隱藏警告的時機

請勿隱藏此規則的警告。

虛擬程式碼範例

說明

下列虛擬程式碼會說明這項規則偵測到的模式。

程式碼

try {
   // Do some work.
   Impersonator imp = new Impersonator("John Doe");
   imp.AddToCreditCardBalance(100);
}
finally {
   // Reset security state.
   imp.Revert();
}

範例

下列虛擬程式碼會顯示您可以用於保護程式碼並符合此規則的模式。

try {
     try {
        // Do some work.
     }
     finally {
        // Reset security state.
     }
}
catch()
{
    throw;
}