CA2124: Quebrar vulnerável finalmente tente cláusulas no exterior
TypeName |
WrapVulnerableFinallyClausesInOuterTry |
CheckId |
CA2124 |
<strong>Categoria</strong> |
Microsoft.Security |
Alteração significativa |
Não separável |
Causa
Nas versões 1.0 e 1.1 da .NET Framework, um método público ou protegido contém um try/catch/finally bloco. O finally bloco aparece para redefinir o estado de segurança e não é colocado um finally bloco.
Descrição da regra
Esta regra localiza try/finally bloqueia o código que vise versões 1.0 e 1.1 da .NET Framework que podem estar vulneráveis a filtros de exceção mal-intencionado presentes na pilha de chamada. Se as operações confidenciais, como a representação ocorrem no bloco try, e uma exceção é lançada, o filtro pode executar antes o finally bloco. No exemplo de representação, isso significa que o filtro será executado como o usuário representado. Os filtros são a implementação atualmente apenas em Visual Basic.
Aviso
Observação nas versões 2.0 e posteriores da .NET Framework, o runtime protege automaticamente um try/catch/ finally Bloco de filtros de exceção mal-intencionados, se a reinicialização ocorrer diretamente no método que contém o bloco de exceção.
Como corrigir violações
Coloque o desfeita try/finally em um bloco try externo. Consulte o segundo exemplo a segue. Isso força o finally para executar antes o código do 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 satisfazem a esta regra.
try {
try {
// Do some work.
}
finally {
// Reset security state.
}
}
catch()
{
throw;
}