CA2141: Los métodos transparentes no deben satisfacer LinkDemands
Elemento | Valor |
---|---|
RuleId | CA2141 |
Category | Microsoft.Security |
Cambio importante | Problemático |
Causa
Un método transparente en seguridad llama a un método de un ensamblado no marcado con el atributo AllowPartiallyTrustedCallersAttribute(APTCA) o bien satisface un SecurityAction.LinkDemand
de un tipo o método.
Nota
Esta regla está en desuso. Para más información, consulte Reglas en desuso.
Descripción de la regla
Satisfacer un LinkDemand es una operación confidencial de seguridad que puede provocar una elevación involuntaria de privilegios. El código transparente de seguridad no debe satisfacer LinkDemands, ya que no está sujeto a los mismos requisitos de auditoría de seguridad que un código crítico para la seguridad. Los métodos transparentes de los conjuntos de nivel 1 del conjunto de reglas de seguridad harán que todos los LinkDemands que cumplan se conviertan en demandas completas en tiempo de ejecución, lo que puede causar problemas de rendimiento. En los conjuntos de nivel 2 del conjunto de reglas de seguridad, los métodos transparentes no se compilarán en el compilador Just-In-Time (JIT) si intentan satisfacer un LinkDemand.
En los conjuntos que usan la seguridad de nivel 2, los intentos de un método transparente de seguridad para satisfacer un LinkDemand o llamar a un método en un ensamblado que no sea APTCA generan un MethodAccessException; en los conjuntos de nivel 1, LinkDemand se convierte en una demanda completa.
Cómo corregir infracciones
Para corregir una infracción de esta regla, marque el método de acceso con el atributo SecurityCriticalAttribute o SecuritySafeCriticalAttribute quite LinkDemand del método al que se accede.
Cuándo suprimir las advertencias
No suprima las advertencias de esta regla.
Ejemplo
En este ejemplo, un método transparente intenta llamar a un método que tiene un linkDemand. Esta regla se activará en este código.
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();
}
}
}
Comentarios
https://aka.ms/ContentUserFeedback.
Próximamente: A lo largo de 2024 iremos eliminando gradualmente GitHub Issues como mecanismo de comentarios sobre el contenido y lo sustituiremos por un nuevo sistema de comentarios. Para más información, vea:Enviar y ver comentarios de