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 9 | 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);
}
}
Regras relacionadas
CA5392: Usar o atributo DefaultDllImportSearchPaths para P/Invokes