Condividi tramite


CA2144: Il codice Transparent non deve caricare assembly da matrici di byte

TypeName

TransparentMethodsShouldNotLoadAssembliesFromByteArrays

CheckId

CA2144

Category

Microsoft.Security

Breaking Change

Breaking

Causa

Un metodo Trasparent carica un assembly da una matrice di byte utilizzando uno dei metodi seguenti:

Descrizione della regola

La revisione di sicurezza per il codice trasparente non è accurata come la revisione di sicurezza per il codice critico, perché il primo non può eseguire azioni sensibili per la sicurezza. Assembly caricati da una matrice di byte potrebbero non essere notati nel codice trasparente e quella matrice di byte potrebbe contenere codice critico o ancora più importante codice critico per la sicurezza, che deve essere controllato. Pertanto, il codice trasparente non deve caricare assembly da una matrice di byte.

Come correggere le violazioni

Per correggere una violazione di questa regola, contrassegnare il metodo che carica l'assembly con l'attributo SecurityCriticalAttribute o SecuritySafeCriticalAttribute.

Esclusione di avvisi

Non escludere un avviso da questa regola.

Esempio

La regola funziona nel seguente perché un metodo trasparente carica un assembly da una matrice di byte.

using System;
using System.IO;
using System.Reflection;

namespace TransparencyWarningsDemo
{

    public class TransparentMethodsLoadAssembliesFromByteArraysClass
    {
        public void TransparentMethod()
        {
            byte[] assemblyBytes = File.ReadAllBytes("DependentAssembly.dll");

            // CA2144 violation - transparent code loading an assembly via byte array.  The fix here is to
            // either make TransparentMethod critical or safe-critical.
            Assembly dependent = Assembly.Load(assemblyBytes);
        }
    }
}