Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
| 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 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
A DefaultDllImportSearchPathsAttribute nincs meghatározva egy Platform Invoke (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: Kódtár biztonságos betöltése.
Szabálysértések kijavítása
Használja a DefaultDllImportSearchPathsAttribute-t a DLL keresési útvonalának kifejezetten a szerelvényhez vagy metódushoz való megadásához.
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 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 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