CA5393: Ne használjon nem biztonságos DllImportSearchPath értéket

Tulajdonság Érték
Szabályazonosító CA5393
Cím Ne használjon nem biztonságos DllImportSearchPath értéket
Kategória Biztonság
A javítás romboló vagy nem romboló Nem törhető
Alapértelmezés szerint engedélyezve a .NET 10-ben Nem
Alkalmazandó nyelvek C# és Visual Basic

Ok

Az xref:System.Runtime.InteropServices.DllImportSearchPath?displayProperty=fullName egyik nem biztonságos értékének <használata:

  • AssemblyDirectory
  • UseDllDirectoryForDependencies
  • ApplicationDirectory
  • LegacyBehavior

Szabály leírása

Rosszindulatú DLL lehet az alapértelmezett DLL keresési könyvtárakban és assembly könyvtárakban. Vagy attól függően, hogy honnan futtatja az alkalmazást, az alkalmazás címtárában rosszindulatú DLL is lehet.

További információkért lásd: Kódtár biztonságos betöltése.

Szabálysértések kijavítása

Használjon biztonságos értékeket DllImportSearchPath explicit keresési útvonal megadásához:

  • SafeDirectories
  • System32
  • UserDirectories

Mikor kell letiltani a figyelmeztetéseket?

A szabályt nyugodtan letilthatja, ha:

  • Biztos abban, hogy a betöltött összeállítás az, amit szeretne.
  • Az importált szerelvény egy gyakran használt rendszerszerelvény, például user32.dll, és a keresési útvonal stratégiája az ismert DLL-mechanizmust követi.

Figyelmeztetés mellőzése

Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.

#pragma warning disable CA5393
// The code that's violating the rule is on this line.
#pragma warning restore CA5393

Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none a konfigurációs fájlban.

[*.{cs,vb}]
dotnet_diagnostic.CA5393.severity = none

További információ: Kódelemzési figyelmeztetések letiltása.

Kód konfigurálása elemzéshez

A következő beállítással konfigurálhatja, hogy a kódbázis mely részein futtassa ezt a szabályt.

Ezt a beállítást konfigurálhatja csak erre a szabályra, az összes szabályra, vagy az ebben a kategóriában szereplő összes szabályra (Biztonság), amelyekre vonatkozik. További információ: Kódminőségi szabály konfigurációs beállításai.

Nem biztonságos DllImportSearchPath-bitek

Konfigurálhatja, hogy melyik DllImportSearchPath érték nem biztonságos az elemzéshez. Ha például meg szeretné adni, hogy a kód ne használjon AssemblyDirectory, UseDllDirectoryForDependencies vagy ApplicationDirectoryadja hozzá a következő kulcs-érték párot a projekt egyik .editorconfig fájljához:

dotnet_code_quality.CA5393.unsafe_DllImportSearchPath_bits = 770

Meg kell adnia az enumerálás értékeinek bitenkénti kombinációjának egész értékét.

Példák pszeudokódokra

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

Megoldás

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: Használja a DefaultDllImportSearchPaths attribútumot a P/Invokes esetén