CA5392: Usare l'attributo DefaultDllImportSearchPaths per P/Invokes
Proprietà | valore |
---|---|
ID regola | CA5392 |
Title | Usare l'attributo DefaultDllImportSearchPaths per i P/Invoke |
Categoria | Sicurezza |
La correzione causa un'interruzione o meno | Non causa un'interruzione |
Abilitato per impostazione predefinita in .NET 9 | No |
Causa
Non DefaultDllImportSearchPathsAttribute è specificato per una funzione Platform Invoke (P/Invoke).
Descrizione regola
Per impostazione predefinita, le funzioni P/Invoke usano DllImportAttribute il probe di una serie di directory, inclusa la directory di lavoro corrente per il caricamento della libreria. Può trattarsi di un problema di sicurezza per determinate applicazioni, causando il dirottamento della DLL.
Ad esempio, se una DLL dannosa con lo stesso nome di quello importato viene inserita nella directory di lavoro corrente, che verrà eseguita prima di tutto per impostazione predefinita, la DLL dannosa potrebbe essere caricata.
Per altre informazioni, vedere Caricare la libreria in modo sicuro.
Come correggere le violazioni
Usare DefaultDllImportSearchPathsAttribute per specificare il percorso di ricerca dll in modo esplicito per l'assembly o il metodo .
Quando eliminare gli avvisi
È possibile eliminare questa regola in modo sicuro se:
- Si è certi che l'assembly caricato sia quello desiderato. Ad esempio, l'applicazione viene eseguita in un server attendibile e si considerano completamente attendibili i file.
- L'assembly importato è un assembly di sistema comunemente usato, ad esempio user32.dll, e la strategia del percorso di ricerca segue il meccanismo DLL note.
Eliminare un avviso
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable CA5392
// The code that's violating the rule is on this line.
#pragma warning restore CA5392
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none
su nel file di configurazione.
[*.{cs,vb}]
dotnet_diagnostic.CA5392.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.
Esempi di pseudo-codice
using System;
using System.Runtime.InteropServices;
class ExampleClass
{
[DllImport("The3rdAssembly.dll")]
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);
}
}
Soluzione
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);
}
}