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;
}