CA2124 : Incluez dans un wrapper les clauses finally vulnérables dans un bloc try externeCA2124: Wrap vulnerable finally clauses in outer try

TypeNameTypeName WrapVulnerableFinallyClausesInOuterTryWrapVulnerableFinallyClausesInOuterTry
CheckIdCheckId CA2124CA2124
CategoryCategory Microsoft.SecurityMicrosoft.Security
Modification avec ruptureBreaking Change Sans ruptureNon Breaking

CauseCause

Dans les versions 1.0 et 1.1 de la .NET Framework.NET Framework, une méthode publique ou protégée contient un try / catch / finally bloc.In versions 1.0 and 1.1 of the .NET Framework.NET Framework, a public or protected method contains a try/catch/finally block. Le finally bloc semble réinitialiser l’état de sécurité et n’est pas placé dans un finally bloc.The finally block appears to reset security state and is not enclosed in a finally block.

Description de la règleRule Description

Cette règle recherche try / finally blocs dans le code qui cible des versions 1.0 et 1.1 de la .NET Framework.NET Framework qui peuvent être vulnérables aux filtres d’exception malveillants présents dans la pile des appels.This rule locates try/finally blocks in code that targets versions 1.0 and 1.1 of the .NET Framework.NET Framework that might be vulnerable to malicious exception filters present in the call stack. Si des opérations sensibles telles que l’emprunt d’identité se produisent dans le bloc try, et une exception est levée, le filtre peut s’exécuter avant le finally bloc.If sensitive operations such as impersonation occur in the try block, and an exception is thrown, the filter can execute before the finally block. Pour l’exemple d’emprunt d’identité, cela signifie que le filtre s’exécute en tant que l’utilisateur représenté.For the impersonation example, this means that the filter would execute as the impersonated user. Les filtres sont actuellement uniquement applicables en Visual Basic.Filters are currently implementable only in Visual Basic.

Avertissement

Remarque dans les versions 2.0 et ultérieures de la .NET Framework.NET Framework, le runtime protège automatiquement un try / catch / finally empêcher des filtres d’exception malveillants, si la réinitialisation se produit directement dans la méthode qui contient le bloc d’exception.Note In versions 2.0 and later of the .NET Framework.NET Framework, the runtime automatically protects a try/catch/ finally block from malicious exception filters, if the reset occurs directly within the method that contains the exception block.

Comment corriger les violationsHow to Fix Violations

Placez le désencapsulée try / finally dans un bloc try externe.Place the unwrapped try/finally in an outer try block. Consultez le deuxième exemple qui suit.See the second example that follows. Cela force le finally à exécuter avant le code de filtre.This forces the finally to execute before filter code.

Quand supprimer les avertissementsWhen to Suppress Warnings

Ne supprimez aucun avertissement de cette règle.Do not suppress a warning from this rule.

Exemple de pseudo-codePseudo-code Example

DescriptionDescription

Le pseudo-code suivant illustre le modèle détecté par cette règle.The following pseudo-code illustrates the pattern detected by this rule.

CodeCode

try {
   // Do some work.
   Impersonator imp = new Impersonator("John Doe");
   imp.AddToCreditCardBalance(100);
}
finally {
   // Reset security state.
   imp.Revert();
}

ExempleExample

Le pseudo-code suivant illustre le modèle que vous pouvez utiliser pour protéger votre code et satisfaire cette règle.The following pseudo-code shows the pattern that you can use to protect your code and satisfy this rule.

try {
     try {
        // Do some work.
     }
     finally {
        // Reset security state.
     }
}
catch()
{
    throw;
}