CA2140 : Le code transparent ne doit pas faire référence à des éléments critiques de sécurité
Élément | Valeur |
---|---|
ID de la règle | CA2140 |
Category | Microsoft.Security |
Modification avec rupture | Rupture |
Cause
Une méthode transparente :
gère un type d’exception de sécurité critique pour la sécurité
a un paramètre marqué comme type critique pour la sécurité
a un paramètre générique avec des contraintes critiques pour la sécurité
a une variable locale d’un type critique pour la sécurité
référence un type marqué comme critique pour la sécurité
appelle une méthode marquée comme critique pour la sécurité
référence un champ marqué comme critique pour la sécurité
référence un type marqué comme critique pour la sécurité
Notes
Cette règle est déconseillée. Pour plus d’informations, consultez Règles dépréciées.
Description de la règle
Un élément de code marqué avec l’attribut SecurityCriticalAttribute est critique pour la sécurité. Une méthode transparente ne peut pas utiliser un élément critique de sécurité. Si un type transparent tente d’utiliser un type critique pour la sécurité, une exception TypeAccessException, MethodAccessException ou FieldAccessException est déclenchée.
Comment corriger les violations
Pour corriger une infraction à cette règle, effectuez l’une des opérations suivantes :
Marquer l’élément de code qui utilise le code critique pour la sécurité avec l’attribut SecurityCriticalAttribute
- ou -
Supprimer l’attribut SecurityCriticalAttribute des éléments de code marqués comme critiques pour la sécurité, puis les marquer avec l’attribut SecuritySafeCriticalAttribute ou SecurityTransparentAttribute.
Quand supprimer les avertissements
Ne supprimez aucun avertissement de cette règle.
Exemple
Dans les exemples suivants, une méthode transparente tente de référencer une collection générique critique pour la sécurité, un champ critique pour la sécurité et une méthode critique pour la 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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour