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);
}
}
Kapcsolódó szabályok
CA5393: Ne használjon nem biztonságos DllImportSearchPath értéket
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: