Megosztás a következőn keresztül:


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 9-ben 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ó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 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 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