CA5393: Nepoužívejte nebezpečnou hodnotu DllImportSearchPath
Vlastnost | Hodnota |
---|---|
ID pravidla | CA5393 |
Název | Nepoužívat nebezpečnou hodnotu DllImportSearchPath |
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
Použití jedné z nebezpečných <hodnot xref:System.Runtime.InteropServices.DllImportSearchPath?displayProperty=fullName:
AssemblyDirectory
UseDllDirectoryForDependencies
ApplicationDirectory
LegacyBehavior
Popis pravidla
Ve výchozích adresářích vyhledávání knihoven DLL a adresářích sestavení může existovat škodlivá knihovna DLL. Nebo v závislosti na tom, odkud se vaše aplikace spouští, může v adresáři aplikace existovat škodlivá knihovna DLL.
Další informace najdete v tématu Načtení knihovny Sejf.
Jak opravit porušení
Místo toho zadejte explicitní cestu hledání pomocí bezpečných DllImportSearchPath hodnot:
SafeDirectories
System32
UserDirectories
Kdy potlačit upozornění
Toto pravidlo je bezpečné potlačit, pokud:
- Jste si jistí, že načtené sestavení je to, co chcete.
- 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 CA5393
// The code that's violating the rule is on this line.
#pragma warning restore CA5393
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.CA5393.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.
Konfigurace kódu pro analýzu
Pomocí následující možnosti nakonfigurujte, ve kterých částech základu kódu se má toto pravidlo spouštět.
Tuto možnost můžete nakonfigurovat jenom pro toto pravidlo, pro všechna pravidla, která platí, nebo pro všechna pravidla v této kategorii (zabezpečení), na která platí. Další informace naleznete v tématu Možnosti konfigurace pravidla kvality kódu.
Nebezpečné bity DllImportSearchPath
Můžete nakonfigurovat, která hodnota DllImportSearchPath je pro analýzu nebezpečná. Chcete-li například určit, že kód by neměl používat AssemblyDirectory
, UseDllDirectoryForDependencies
nebo ApplicationDirectory
přidejte následující pár klíč-hodnota do souboru .editorconfig v projektu:
dotnet_code_quality.CA5393.unsafe_DllImportSearchPath_bits = 770
Měli byste zadat celočíselnou hodnotu bitové kombinace hodnot výčtu.
Příklady pseudokódu
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);
}
}
Ř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
CA5392: Použití atributu DefaultDllImportSearchPaths pro volání nespravovaných položek