Share via


CA5392: Het kenmerk DefaultDllImportSearchPaths gebruiken voor P/Invokes

Eigenschappen Weergegeven als
Regel-id CA5392
Titel Het kenmerk DefaultDllImportSearchPaths gebruiken voor P/Invokes
Categorie Beveiliging
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 9 Nee

Oorzaak

De DefaultDllImportSearchPathsAttribute functie is niet opgegeven voor een functie Platform Invoke (P/Invoke ).

Beschrijving van regel

P/Invoke-functies gebruiken standaard DllImportAttribute een aantal mappen, inclusief de huidige werkmap voor de bibliotheek die moet worden geladen. 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.

Schendingen oplossen

Gebruik DefaultDllImportSearchPathsAttribute dit 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 mechanisme Bekende DLL's.

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 Codeanalysewaarschuwingen onderdrukken voor meer informatie.

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