Partilhar via


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

Propriedade valor
ID da regra CA5393
Cargo Não use o valor DllImportSearchPath não seguro
Categoria Segurança
A correção está quebrando ou não quebrando Sem quebra
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 diretórios de assembly. Ou, dependendo de onde seu aplicativo é executado, 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

Em vez disso, use valores seguros de para especificar um caminho de DllImportSearchPath 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ê quer.
  • 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

Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar 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 para um arquivo, pasta ou projeto, defina sua severidade como none no arquivo de configuração.

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

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

Configurar código para análise

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

Pode configurar esta opção apenas para esta regra, para todas as regras a que se aplica ou para todas as regras nesta categoria (Segurança) a que se aplica. Para obter mais informações, consulte Opções de configuração da 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, ou ApplicationDirectory, UseDllDirectoryForDependencies adicione o seguinte par chave-valor 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: Use o atributo DefaultDllImportSearchPaths para P/Invokes