CA2124: Incluir cláusulas finally vulnerables en un bloque try externo
Elemento | Valor |
---|---|
RuleId | CA2124 |
Category | Microsoft.Security |
Cambio importante | Poco problemático |
Causa
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
aparece para restablecer el estado de seguridad y no se incluye en un bloque finally
.
Nota
Esta regla está en desuso. Para más información, consulte Reglas en desuso.
Descripción de la regla
Esta regla busca bloques try
/finally
en el código que tiene como destino las versiones 1.0 y 1.1 de .NET Framework que podrían ser vulnerables a filtros de excepciones malintencionados presentes en la pila de llamadas. Si se producen operaciones confidenciales como la suplantación en el bloque try y se produce una excepción, el filtro se puede ejecutar antes del bloque finally
. En el ejemplo de suplantación, esto significa que el filtro se ejecutaría como usuario suplantado. Los filtros solo se pueden implementar actualmente en Visual Basic.
Nota
En las versiones 2.0 y posteriores de .NET Framework, el entorno de ejecución protege automáticamente un bloque try
/catch
/ finally
de filtros de excepciones malintencionados, si el restablecimiento se produce directamente dentro del método que contiene el bloque de excepciones.
Cómo corregir infracciones
Coloque el try
/finally
desencapsulado en un bloque try externo. Vea el segundo ejemplo que se muestra a continuación. Esto obliga a que finally
se ejecute antes del código de filtro.
Cuándo suprimir las advertencias
No suprima las advertencias de esta regla.
Ejemplo de pseudocódigo
Descripción
El pseudocódigo siguiente muestra el patrón que detecta esta regla.
try {
// Do some work.
Impersonator imp = new Impersonator("John Doe");
imp.AddToCreditCardBalance(100);
}
finally {
// Reset security state.
imp.Revert();
}
El siguiente pseudocódigo muestra el patrón que puede usar para proteger el código y cumplir con esta regla.
try {
try {
// Do some work.
}
finally {
// Reset security state.
}
}
catch()
{
throw;
}
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de