必須將有弱點的 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;
}