CA2124: Incluir cláusulas Finally vulnerables en un bloque Try externo
TypeName |
WrapVulnerableFinallyClausesInOuterTry |
Identificador de comprobación |
CA2124 |
Categoría |
Microsoft.Security |
Cambio problemático |
No |
Motivo
En las versiones 1.0 y 1.1 de .NET Framework, un método público o protegido contiene un bloque try/catch/finally.El bloque finally restablece el estado de seguridad y no se agrega a un bloque finally.
Descripción de la regla
Esta regla busca bloques try/finally en el código diseñados para las versiones 1.0 y 1.1 de .NET Framework que podrían ser vulnerables a los filtros de excepciones malintencionados presentes en la pila de llamadas.Si las operaciones reservadas como la suplantación aparecen en bloques try, y se produce una excepción, el filtro puede ejecutarse antes que el bloque finally.Para obtener un ejemplo de suplantación, esto significa que el filtro se ejecutaría como un usuario suplantado.Los filtros actualmente sólo pueden implementarse en Visual Basic.
Precaución |
---|
Nota En versiones 2.0 y posteriores de .NET Framework, el runtime protege automáticamente un bloque try/catch/ finally de los filtros de excepciones malintencionados, si el reinicio se produce directamente dentro del método que contiene el bloque de excepción. |
Cómo corregir infracciones
Coloque el bloque try/finally liberado en un bloque try externo.Vea el ejemplo que sigue.Esto obliga al bloque finally a ejecutarse antes que el código del filtro.
Cuándo suprimir advertencias
No suprima las advertencias de esta regla.
Ejemplo de seudocódigo
Descripción
El pseudocódigo siguiente muestra el modelo detectado por esta regla.
Código
try {
// Do some work.
Impersonator imp = new Impersonator("John Doe");
imp.AddToCreditCardBalance(100);
}
finally {
// Reset security state.
imp.Revert();
}
Ejemplo
El pseudocódigo siguiente muestra el modelo que puede utilizarse para proteger el código y cumplir esta regla.
try {
try {
// Do some work.
}
finally {
// Reset security state.
}
}
catch()
{
throw;
}