Partager via


CA2140 : Le code transparent ne doit pas faire référence à des éléments critiques de sécurité

TypeName

TransparentMethodsMustNotReferenceCriticalCode

CheckId

CA2140

Catégorie

Microsoft.Security

Modification avec rupture

Oui

Cause

Méthode transparente :

  • gère un type d'exception de sécurité critique de sécurité

  • a un paramètre marqué comme type critique de sécurité

  • a un paramètre générique avec des contraintes critiques de sécurité

  • a une variable locale d'un type critique de sécurité

  • référence un type marqué comme critique de sécurité

  • appelle une méthode marquée comme critique de sécurité

  • référence un champ marqué comme critique de sécurité

  • retourne un type marqué comme critique de sécurité

Description de la règle

Un élément de code marqué avec l'attribut SecurityCriticalAttribute est critique de sécurité. Une méthode transparente ne peut pas utiliser un élément critique de sécurité. Si un type transparent essaie d'utiliser un type critique de sécurité un TypeAccessException, MethodAccessException , ur FieldAccessException est déclenché.

Comment corriger les violations

Pour résoudre une violation de cette règle, effectuez l'une des opérations suivantes :

Quand supprimer les avertissements

Ne supprimez aucun avertissement de cette règle.

Exemple

Dans les exemples suivants, une méthode transparente essaie de référencer une collection générique critique de sécurité, un champ critique de sécurité et une méthode critique de sécurité.

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 aussi

Référence

SecurityTransparentAttribute

SecurityCriticalAttribute

SecurityTransparentAttribute

SecurityTreatAsSafeAttribute

System.Security