Share via


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 kompatibilitástörő vagy nem törik Nem törés
Alapértelmezés szerint engedélyezve a .NET 8-ban Nem

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 szerelvénykö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 a Kódtár betöltése Széf.

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 benne, hogy a betöltött szerelvény az, amit szeretne.
  • Az importált szerelvény egy gyakran használt rendszerszerelvény, például a 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: A DefaultDllImportSearchPaths attribútum használata P/Invokes esetén