CA2140: El código transparente no debe hacer referencia a elementos críticos para la seguridad
Elemento | Valor |
---|---|
RuleId | CA2140 |
Category | Microsoft.Security |
Cambio importante | Problemático |
Causa
Un método transparente:
controla un tipo de excepción de seguridad crítica para la seguridad
tiene un parámetro marcado como un tipo crítico para la seguridad
tiene un parámetro genérico con restricciones críticas de seguridad
tiene una variable local de un tipo crítico para la seguridad
hace referencia a un tipo marcado como crítico para la seguridad
llama a un método marcado como crítico para la seguridad
hace referencia a un campo marcado como crítico para la seguridad
devuelve un tipo marcado como crítico para la seguridad
Nota
Esta regla está en desuso. Para más información, consulte Reglas en desuso.
Descripción de la regla
Un elemento de código que se marca con el atributo SecurityCriticalAttribute es crítico para la seguridad. Un método transparente no puede utilizar un elemento crítico para la seguridad. Si un tipo transparente intenta usar un tipo crítico para la seguridad, se produce una excepción TypeAccessException, MethodAccessException o FieldAccessException.
Cómo corregir infracciones
Para corregir una infracción de esta regla, realice una de las siguientes acciones:
Marque el elemento de código que usa el código crítico para la seguridad con el SecurityCriticalAttribute atributo.
O bien
Quite el atributo SecurityCriticalAttribute de los elementos de código marcados como críticos para la seguridad y, en su lugar, guárdelos con el atributo SecuritySafeCriticalAttribute o SecurityTransparentAttribute.
Cuándo suprimir las advertencias
No suprima las advertencias de esta regla.
Ejemplo
En los ejemplos siguientes, un método transparente intenta hacer referencia a una colección genérica crítica de seguridad, un campo crítico para la seguridad y un método crítico para la seguridad.
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();
}
}
}
Consulte también
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