CA2124: encapsular cláusulas finalmente vulneráveis em tentativa externa
TypeName |
WrapVulnerableFinallyClausesInOuterTry |
CheckId |
CA2124 |
Categoria |
Microsoft.Security |
Alteração Significativa |
Sem Quebra |
Causa
Nas versões 1,0 e 1,1 de .NET Framework, um público ou um método protegido contêm try/catch/bloco definally .O bloco de finally aparece para reiniciar o estado de segurança e não é incluído em um bloco de finally .
Descrição da Regra
Esta regra encontrar try/blocos definally no código que se destinam às versões 1,0 e 1,1 de .NET Framework que pode ser vulneráveis a filtros mal-intencionados da exceção atual da pilha de chamadas.Se as operações particulares como a representação ocorrem no bloco try, e uma exceção será gerada, o filtro pode executar antes que o bloco de finally .Para o exemplo de representação, isso significa que o filtro executado como o usuário representado.Os filtros são implementable atualmente apenas no Visual Basic.
Cuidado |
---|
Observação Nas versões 2,0 e posterior de .NET Framework, o tempo de execução protege automaticamente try/catch/bloco de finally filtros mal-intencionados de exceção, se a reinicialização ocorre diretamente dentro do método que contém o bloco de exceção. |
Como Corrigir Violações
Colocar trydesempacotado/finally em um bloco CATCH da tentativa.Consulte o segundo exemplo a seguir.Isso força finally para executar antes de código de filtro.
Quando Suprimir Alertas
Não elimine um alerta desta regra.
Exemplo do 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 para satisfazer essa regra.
try {
try {
// Do some work.
}
finally {
// Reset security state.
}
}
catch()
{
throw;
}