CA5392: Použití atributu DefaultDllImportSearchPaths pro volání nespravovaných položek
Vlastnost | Hodnota |
---|---|
ID pravidla | CA5392 |
Název | Používat při voláních nespravovaného kódu atribut DefaultDllImportSearchPaths |
Kategorie | Zabezpečení |
Oprava způsobující chybu nebo chybu způsobující chybu | Nenarušující |
Povoleno ve výchozím nastavení v .NET 8 | No |
Příčina
Není DefaultDllImportSearchPathsAttribute určena pro funkci Vyvolání platformy (P/Invoke ).
Popis pravidla
Ve výchozím nastavení funkce volání nespravovaného kódu pomocí DllImportAttribute sondy řady adresářů, včetně aktuálního pracovního adresáře pro načtení knihovny. To může být problém se zabezpečením pro určité aplikace, což vede k napadení knihovny DLL.
Pokud je například do aktuálního pracovního adresáře umístěna škodlivá knihovna DLL se stejným názvem jako importovaná, která bude ve výchozím nastavení prohledána, může být načtena škodlivá knihovna DLL.
Další informace najdete v tématu Načtení knihovny Sejf.
Jak opravit porušení
Slouží DefaultDllImportSearchPathsAttribute k určení cesty hledání knihovny DLL explicitně pro sestavení nebo metodu.
Kdy potlačit upozornění
Toto pravidlo je bezpečné potlačit, pokud:
- Jste si jistí, že načtené sestavení je to, co chcete. Například vaše aplikace běží na důvěryhodném serveru a vy plně důvěřujete souborům.
- Importované sestavení je běžně používané systémové sestavení, jako je user32.dll, a strategie cesty hledání se řídí známým mechanismem knihoven DLL.
Potlačení upozornění
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable CA5392
// The code that's violating the rule is on this line.
#pragma warning restore CA5392
Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none
konfiguračním souboru.
[*.{cs,vb}]
dotnet_diagnostic.CA5392.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.
Příklady pseudokódu
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);
}
}
Řešení
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);
}
}
Související pravidla
CA5393: Nepoužívejte nebezpečnou hodnotu DllImportSearchPath