encapsular de vulnerável finalmente tente cláusulas no exterior

TypeName

WrapVulnerableFinallyClausesInOuterTry

CheckId

CA2124

Category (Categoria)

Microsoft.segurança

Quebrando alterar

Não separável

Causa

Um método público ou protegido contém um try/finally bloco. The finally bloco parece reiniciar o estado de segurança e não está contido em um finally bloco.

Descrição da regra

Esta regra localiza try/finally blocos podem estar vulneráveis a filtros de exceção maliciosos presentes na pilha de chamadas. Se sistema autônomo operações confidenciais, sistema autônomo representação ocorrer no bloco try, e uma exceção é lançada, o filtro pode executar antes o finally bloco. Por exemplo representação, isso significa que o filtro será executado sistema autônomo usuário representado.Os filtros são implementação atualmente apenas no Visual Basic.

Como corrigir violações

Coloque o unwrapped try/finally em um bloco try externo. Consulte o segundo exemplo que se segue.Isso força o finally para executar antes o código de filtro.

Quando suprimir avisos

Não suprimir um aviso da regra.

Exemplo de pseudocódigo

Descrição

O pseudocódigo a seguir ilustra o padrão detectado por esta regra.

Código

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

Exemplo

O pseudocódigo a seguir mostra o padrão que você pode usar para proteger seu código e atender a essa regra.

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