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


CA5392: A DefaultDllImportSearchPaths attribútum használata P/Invokes esetén

Tulajdonság Érték
Szabályazonosító CA5392
Cím A P/Invokes defaultDllImportSearchPaths attribútumának használata
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

Ez DefaultDllImportSearchPathsAttribute nincs megadva platformhívási (P/Invoke) függvényhez.

Szabály leírása

Alapértelmezés szerint a P/Invoke függvények több könyvtár mintavételét használják DllImportAttribute , beleértve a betöltendő tár aktuális munkakönyvtárát is. Ez biztonsági probléma lehet bizonyos alkalmazások esetében, ami DLL-eltérítéshez vezethet.

Ha például egy, az importált nevével megegyező nevű rosszindulatú DLL az aktuális munkakönyvtár alá kerül, amely alapértelmezés szerint először keres, akkor a rosszindulatú DLL betölthető.

További információkért lásd a Kódtár betöltése Széf.

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

A DefaultDllImportSearchPathsAttribute DLL keresési útvonalának megadása kifejezetten a szerelvényhez vagy a metódushoz.

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 alkalmazás például egy megbízható kiszolgálón fut, és teljesen megbízik a fájlokban.
  • 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 CA5392
// The code that's violating the rule is on this line.
#pragma warning restore CA5392

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.CA5392.severity = none

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

Példák pszeudokódokra

using System;
using System.Runtime.InteropServices;

class ExampleClass
{
    [DllImport("The3rdAssembly.dll")]
    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);
    }
}

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