CA2141 : Les méthodes transparentes ne répondent pas aux LinkDemands
Élément | Valeur |
---|---|
ID de la règle | CA2141 |
Category | Microsoft.Security |
Modification avec rupture | Rupture |
Cause
Une méthode transparente de sécurité appelle une méthode dans un assembly qui n'est pas marqué à l'aide de l'attribut AllowPartiallyTrustedCallersAttribute (APTCA), ou une méthode transparente de sécurité satisfait une SecurityAction.LinkDemand
pour un type ou une méthode.
Notes
Cette règle est déconseillée. Pour plus d’informations, consultez Règles dépréciées.
Description de la règle
La satisfaction d’un LinkDemand est une opération de sécurité qui peut provoquer une élévation involontaire des privilèges. Le code transparent de sécurité ne doit pas satisfaire LinkDemands, car il n’est pas soumis aux mêmes exigences d’audit de sécurité que le code critique de sécurité. La présence de méthodes transparentes dans les assemblys de niveau 1 de l’ensemble de règles de sécurité entraînent la conversion de tous les LinkDemands en requêtes complètes au moment de l’exécution, ce qui peut entraîner des problèmes de performances. Dans les assemblys de niveau 2 de la règle de sécurité, les méthodes transparentes ne sont pas compilées dans le compilateur juste-à-temps (JIT) s’ils tentent de satisfaire un LinkDemand.
Dans les assemblys qui utilisent la sécurité de niveau 2, les tentatives effectuées par une méthode transparente de sécurité pour satisfaire un LinkDemand ou appeler une méthode dans un assembly non-APTCA déclenchent une MethodAccessException ; dans les assemblys de niveau 1, linkDemand devient une requête complète.
Comment corriger les violations
Pour corriger une violation de cette règle, marquez la méthode d’accès avec l’attribut SecurityCriticalAttribute ou SecuritySafeCriticalAttribute, ou supprimez LinkDemand de la méthode accessible.
Quand supprimer les avertissements
Ne supprimez aucun avertissement de cette règle.
Exemple
Dans cet exemple, une méthode transparente tente d’appeler une méthode qui a un LinkDemand. Cette règle se déclenche sur ce code.
using System;
using System.Security.Permissions;
namespace TransparencyWarningsDemo
{
public class TransparentMethodSatisfiesLinkDemandsClass
{
[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
public void LinkDemandMethod() { }
public void TransparentMethod()
{
// CA2141 violation - transparent method calling a method protected with a link demand. Any of the
// following fixes will work here:
// 1. Make TransparentMethod critical
// 2. Make TransparentMethod safe critical
// 3. Remove the LinkDemand from LinkDemandMethod (In this case, that would be recommended anyway
// since it's level 2 -- however you could imagine it in a level 1 assembly)
LinkDemandMethod();
}
}
}
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