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