Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
| Eigenschap | Waarde |
|---|---|
| Regel-id | CA5392 |
| Titel | Het kenmerk DefaultDllImportSearchPaths gebruiken voor P/Invokes |
| Categorie | Beveiliging |
| Fix kan brekend of niet-brekend zijn | Niet-brekend |
| Standaard ingeschakeld in .NET 10 | Nee |
| Toepasselijke talen | C# en Visual Basic |
Oorzaak
De DefaultDllImportSearchPathsAttribute is niet gespecificeerd voor een Platform Invoke (P/Invoke) functie.
Beschrijving van regel
P/Invoke-functies gebruiken standaard DllImportAttribute om een aantal directories te doorzoeken, waaronder de huidige werkdirectory voor de te laden bibliotheek. Dit kan een beveiligingsprobleem zijn voor bepaalde toepassingen, wat leidt tot DLL-kaping.
Als bijvoorbeeld een schadelijk DLL-bestand met dezelfde naam als de geïmporteerde dll wordt geplaatst onder de huidige werkmap, die standaard wordt doorzocht, kan de schadelijke DLL worden geladen.
Zie Bibliotheek veilig laden voor meer informatie.
Hoe schendingen op te lossen
Gebruik DefaultDllImportSearchPathsAttribute om het DLL-zoekpad expliciet op te geven voor de assembly of de methode.
Wanneer waarschuwingen onderdrukken
Het is veilig om deze regel te onderdrukken als:
- U weet zeker dat de geladen assembly is wat u wilt. Uw toepassing wordt bijvoorbeeld uitgevoerd op een vertrouwde server en u vertrouwt de bestanden volledig.
- De geïmporteerde assembly is een veelgebruikte systeemassembly, zoals user32.dll, en de zoekpadstrategie volgt het Known DLL's-mechanisme.
Een waarschuwing onderdrukken
Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.
#pragma warning disable CA5392
// The code that's violating the rule is on this line.
#pragma warning restore CA5392
Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none ervan in op het configuratiebestand.
[*.{cs,vb}]
dotnet_diagnostic.CA5392.severity = none
Zie voor meer informatie Hoe codeanalysewaarschuwingen te onderdrukken.
Voorbeelden van pseudocode
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);
}
}
Oplossing
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);
}
}