CA2140 : Le code transparent ne doit pas faire référence à des éléments critiques de sécuritéCA2140: Transparent code must not reference security critical items

TypeNameTypeName TransparentMethodsMustNotReferenceCriticalCodeTransparentMethodsMustNotReferenceCriticalCode
CheckIdCheckId CA2140CA2140
CategoryCategory Microsoft.SecurityMicrosoft.Security
Modification avec ruptureBreaking Change RuptureBreaking

CauseCause

Une méthode transparente :A transparent method:

  • gère un type d’exception de sécurité critique de sécuritéhandles a security critical security exception type

  • a un paramètre qui est marqué comme un type critique de sécuritéhas a parameter that is marked as a security critical type

  • a un paramètre générique avec des contraintes critiques de sécuritéhas a generic parameter with a security critical constraints

  • a une variable locale d’un type critique de sécuritéhas a local variable of a security critical type

  • fait référence à un type qui est marqué comme sécurité critiquesreferences a type that is marked as security critical

  • appelle une méthode qui est marquée en tant que de sécurité critiquescalls a method that is marked as security critical

  • fait référence à un champ marqué comme de sécurité critiquereferences a field that is marked as security critical

  • Retourne un type qui est marqué comme sécurité critiquesreturns a type that is marked as security critical

Description de la règleRule description

Un élément de code qui est marqué avec le SecurityCriticalAttribute attribut est critique de sécurité.A code element that is marked with the SecurityCriticalAttribute attribute is security critical. Une méthode transparente ne peut pas utiliser un élément critique de sécurité.A transparent method cannot use a security critical element. Si un type transparent essaie d’utiliser un type critique de sécurité un TypeAccessException, MethodAccessException , ou FieldAccessException est déclenché.If a transparent type attempts to use a security critical type a TypeAccessException, MethodAccessException , or FieldAccessException is raised.

Comment corriger les violationsHow to fix violations

Pour corriger une violation de cette règle, effectuez l’une des opérations suivantes :To fix a violation of this rule, do one of the following:

Quand supprimer les avertissementsWhen to suppress warnings

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

ExempleExample

Dans les exemples suivants, une méthode transparente tente de faire référence à une collection générique critique de sécurité, un champ critique de sécurité et une méthode critique de sécurité.In the following examples, a transparent method attempts to reference a security critical generic collection, a security critical field, and a security critical method.

using System;
using System.Security;
using System.Collections.Generic;

namespace TransparencyWarningsDemo
{

    [SecurityCritical]
    public class SecurityCriticalClass { }

    public class TransparentMethodsReferenceCriticalCodeClass
    {
        [SecurityCritical]
        private object m_criticalField;

        [SecurityCritical]
        private void CriticalMethod() { }

        public void TransparentMethod()
        {
            // CA2140 violation - transparent method accessing a critical type.  This can be fixed by any of:
            //  1. Make TransparentMethod critical
            //  2. Make TransparentMethod safe critical
            //  3. Make CriticalClass safe critical
            //  4. Make CriticalClass transparent
            List<SecurityCriticalClass> l = new List<SecurityCriticalClass>();

            // CA2140 violation - transparent method accessing a critical field.  This can be fixed by any of:
            //  1. Make TransparentMethod critical
            //  2. Make TransparentMethod safe critical
            //  3. Make m_criticalField safe critical
            //  4. Make m_criticalField transparent
            m_criticalField = l;

            // CA2140 violation - transparent method accessing a critical method.  This can be fixed by any of:
            //  1. Make TransparentMethod critical
            //  2. Make TransparentMethod safe critical
            //  3. Make CriticalMethod safe critical
            //  4. Make CriticalMethod transparent
            CriticalMethod();
        }
    }
}

Voir aussiSee also