Partilhar via


CA2140: Código Transparent não deve fazer referência a itens essenciais de segurança

TypeName

TransparentMethodsMustNotReferenceCriticalCode

CheckId

CA2140

<strong>Categoria</strong>

Microsoft.Security

Alteração significativa

Quebrando

Causa

Um método transparente:

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

  • tem um parâmetro que está marcado como um tipo de segurança críticas

  • tem um parâmetro genérico com um restrições de segurança críticas

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

  • referencia um tipo que está marcado como de segurança crítico

  • chama um método que está marcado como de segurança crítico

  • faz referência a um campo que está marcado como de segurança crítico

  • Retorna um tipo que está marcado como de segurança crítico

Descrição da regra

Um elemento de código é marcado com o SecurityCriticalAttribute atributo é crítica de segurança. Um método transparente não é possível usar um elemento crítico da segurança. Se um tipo transparente tenta usar um tipo de segurança crítica uma TypeAccessException, MethodAccessException , ou FieldAccessException é gerado.

Como corrigir violações

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

Quando suprimir avisos

Não suprimir um aviso da regra.

Exemplo

Os exemplos a seguir, um método transparente tenta fazer referência a uma coleção genérica críticas de segurança, um campo de crítica de segurança e um método de segurança críticos.

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