Condividi tramite


Incapsulare le clausole finally vulnerabili in un try esterno

Aggiornamento: novembre 2007

TypeName

WrapVulnerableFinallyClausesInOuterTry

CheckId

CA2124

Category

Microsoft.Security

Breaking Change

Non sostanziale

Causa

Un metodo pubblico o protetto contiene un blocco try/finally. In apparenza il blocco finally reimposta lo stato di sicurezza e non è incluso in un blocco finally.

Descrizione della regola

La regola individua i blocchi try/finally che possono essere vulnerabili a filtri di eccezione dannosi presenti nello stack di chiamate. Se nel blocco try vengono eseguite operazioni quali la rappresentazione e viene generata un'eccezione, il filtro può essere eseguito prima del blocco finally. Nell'esempio della rappresentazione, il filtro verrebbe eseguito come l'utente rappresentato. I filtri sono attualmente implementabili solo in Visual Basic.

Correzione di violazioni

Inserire il blocco try/finally privo di wrapper in un blocco try esterno. Vedere il secondo esempio riportato di seguito in cui viene forzata l'esecuzione del blocco finally prima del codice di filtro.

Esclusione di avvisi

Non escludere un avviso da questa regola.

Esempio di pseudo-codice

Descrizione

Nello pseudo-codice riportato di seguito viene illustrato il modello rilevato da questa regola.

Codice

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

Esempio

Nello pseudo-codice riportato di seguito viene illustrato il modello che è possibile utilizzare per proteggere il codice e soddisfare questa regola.

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