Share via


CA5393: Não usar o valor DllImportSearchPath não seguro

Property Valor
ID da regra CA5393
Título Não usar o valor DllImportSearchPath não seguro
Categoria Segurança
Correção interruptiva ou sem interrupção Sem interrupção
Habilitado por padrão no .NET 8 Não

Causa

Usando um dos valores não seguros de <xref:System.Runtime.InteropServices.DllImportSearchPath?displayProperty=fullName:

  • AssemblyDirectory
  • UseDllDirectoryForDependencies
  • ApplicationDirectory
  • LegacyBehavior

Descrição da regra

Pode haver uma DLL mal-intencionada nos diretórios de pesquisa de DLL padrão e nos diretórios de assembly. Dependendo de onde o aplicativo é executado, também pode haver uma DLL mal-intencionada no diretório do aplicativo.

Para obter mais informações, consulte Carregar biblioteca com segurança.

Como corrigir violações

Use valores seguros de DllImportSearchPath para especificar um caminho de pesquisa explícito:

  • SafeDirectories
  • System32
  • UserDirectories

Quando suprimir avisos

É seguro suprimir esta regra se:

  • Você tem certeza de que o assembly carregado é o que você deseja.
  • O assembly importado é um assembly de sistema comumente usado, como user32.dll, e a estratégia de caminho de pesquisa segue o mecanismo de DLLs conhecidas.

Suprimir um aviso

Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar a regra.

#pragma warning disable CA5393
// The code that's violating the rule is on this line.
#pragma warning restore CA5393

Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none no arquivo de configuração.

[*.{cs,vb}]
dotnet_diagnostic.CA5393.severity = none

Para obter mais informações, confira Como suprimir avisos de análise de código.

Configurar código para analisar

Use a opção a seguir para configurar em quais partes da base de código essa regra deve ser executada.

Você pode configurar essa opção apenas para essa regra, para todas as regras às quais ela se aplica ou para todas as regras nessa categoria (Segurança) às quais ela se aplica. Para obter mais informações, consulte Opções de configuração de regra de qualidade de código.

Bits DllImportSearchPath não seguros

Você pode configurar qual valor de DllImportSearchPath não é seguro para a análise. Por exemplo, para especificar que o código não deve usar AssemblyDirectory, UseDllDirectoryForDependencies ou ApplicationDirectory, adicione o seguinte par de valores-chave a um arquivo .editorconfig em seu projeto:

dotnet_code_quality.CA5393.unsafe_DllImportSearchPath_bits = 770

Você deve especificar o valor inteiro de uma combinação bit a bit dos valores da enumeração.

Exemplos de pseudocódigo

using System;
using System.Runtime.InteropServices;

class ExampleClass
{
    [DllImport("The3rdAssembly.dll")]
    [DefaultDllImportSearchPaths(DllImportSearchPath.AssemblyDirectory)]
    public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);

    public void ExampleMethod()
    {
        MessageBox(new IntPtr(0), "Hello World!", "Hello Dialog", 0);
    }
}

Solução

using System;
using System.Runtime.InteropServices;

class ExampleClass
{
    [DllImport("The3rdAssembly.dll")]
    [DefaultDllImportSearchPaths(DllImportSearchPath.UserDirectories)]
    public static extern int MessageBox(IntPtr hWnd, String text, String caption, uint type);

    public void ExampleMethod()
    {
        MessageBox(new IntPtr(0), "Hello World!", "Hello Dialog", 0);
    }
}

CA5392: Usar o atributo DefaultDllImportSearchPaths para P/Invokes