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