Compartilhar via


CA2140: o código transparente não deve fazer referência a itens críticos de segurança

TypeName

TransparentMethodsMustNotReferenceCriticalCode

CheckId

CA2140

Categoria

Microsoft.Security

Alteração Significativa

Quebra

Causa

Um método transparente:

  • trata um tipo de exceção crítico da segurança

  • tem um parâmetro que é marcado como um tipo crítico de segurança

  • tem um parâmetro genérica com restrições críticos de uma segurança

  • tem uma variável local de um tipo crítico de segurança

  • faz referência a um tipo que foi marcada como a segurança crítico

  • chama um método marcado como segurança crítico

  • se refere a um campo que foi marcada como a segurança crítico

  • retorna um tipo que foi marcada como a segurança crítico

Descrição da Regra

Um elemento de código que é marcado com o atributo de SecurityCriticalAttribute segurança é crítico.Um método transparente não pode usar um elemento fundamental de segurança.Se um tipo transparente tenta usar um tipo crítico de segurança TypeAccessException, MethodAccessException , ou FieldAccessException são gerados.

Como Corrigir Violações

Para corrigir uma violação desta regra, siga um destes procedimentos:

Quando Suprimir Alertas

Não elimine um alerta desta regra.

Exemplo

Nos exemplos a seguir, um método transparente tentar referenciar uma coleção genérica crítico de segurança, um campo crítico de segurança, e um método crítico de segurança.

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 também

Referência

SecurityTransparentAttribute

SecurityCriticalAttribute

SecurityTransparentAttribute

SecurityTreatAsSafeAttribute

System.Security