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 ApplicationDirectorypř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);
    }
}

CA5392: Použití atributu DefaultDllImportSearchPaths pro volání nespravovaných položek