CA2144: Código Transparent não deve carregar assemblies de matrizes de bytes
TypeName |
TransparentMethodsShouldNotLoadAssembliesFromByteArrays |
CheckId |
CA2144 |
<strong>Categoria</strong> |
Microsoft.Security |
Alteração significativa |
Quebrando |
Causa
Um método transparente carrega um assembly de uma matriz de bytes usando um dos seguintes métodos:
Descrição da regra
A revisão de segurança para o código transparent não é o mais completa, como a revisão de segurança para o código critical, porque o código transparent não pode executar ações de segurança confidenciais. Assemblies carregados a partir de uma matriz de bytes não podem ser observados no código transparente e a matriz de bytes que pode conter código crítico ou seguro mais importante crítico que precisam ser auditadas. Portanto, o código transparent não deve carregar assemblies de uma matriz de bytes.
Como corrigir violações
Para corrigir uma violação desta regra, marcar o método que está carregando o assembly com o SecurityCriticalAttribute ou SecuritySafeCriticalAttribute atributo.
Quando suprimir avisos
Não suprimir um aviso da regra.
Exemplo
A regra é acionado no código a seguir porque um método transparente carrega um assembly de uma matriz de bytes.
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);
}
}
}