CA5392: Het kenmerk DefaultDllImportSearchPaths gebruiken voor P/Invokes

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);
    }
}

CA5393: Gebruik geen onveilige DllImportSearchPath-waarde