Share via


CA5393: Gebruik geen onveilige DllImportSearchPath-waarde

Eigenschappen Weergegeven als
Regel-id CA5393
Titel Gebruik geen onveilige DllImportSearchPath-waarde
Categorie Beveiliging
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 8 Nee

Oorzaak

Gebruik een van de onveilige waarden van <xref:System.Runtime.InteropServices.DllImportSearchPath?displayProperty=fullName:

  • AssemblyDirectory
  • UseDllDirectoryForDependencies
  • ApplicationDirectory
  • LegacyBehavior

Beschrijving van regel

Er kan een schadelijk DLL-bestand zijn in de standaard-DLL-zoekmappen en assemblymappen. Of, afhankelijk van waar uw toepassing vandaan wordt uitgevoerd, kan er een schadelijke DLL in de map van de toepassing voorkomen.

Zie Bibliotheek veilig laden voor meer informatie.

Schendingen oplossen

Gebruik in plaats daarvan veilige waarden om DllImportSearchPath een expliciet zoekpad op te geven:

  • SafeDirectories
  • System32
  • UserDirectories

Wanneer waarschuwingen onderdrukken

Het is veilig om deze regel te onderdrukken als:

  • U weet zeker dat de geladen assembly is wat u wilt.
  • De geïmporteerde assembly is een veelgebruikte systeemassembly, zoals user32.dll, en de zoekpadstrategie volgt het bekende DLL-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 CA5393
// The code that's violating the rule is on this line.
#pragma warning restore CA5393

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.CA5393.severity = none

Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.

Code configureren om te analyseren

Gebruik de volgende optie om te configureren op welke onderdelen van uw codebase deze regel moet worden uitgevoerd.

U kunt deze optie configureren voor alleen deze regel, voor alle regels waarop deze van toepassing is, of voor alle regels in deze categorie (beveiliging) waarop deze van toepassing is. Zie de configuratieopties voor de codekwaliteitsregel voor meer informatie.

Onveilige DllImportSearchPath-bits

U kunt configureren welke waarde DllImportSearchPath onveilig is voor de analyse. Als u bijvoorbeeld wilt opgeven dat de code niet mag worden gebruikt AssemblyDirectory, UseDllDirectoryForDependencies of ApplicationDirectoryvoegt u het volgende sleutel-waardepaar toe aan een .editorconfig-bestand in uw project:

dotnet_code_quality.CA5393.unsafe_DllImportSearchPath_bits = 770

U moet de gehele waarde van een bitsgewijze combinatie van de opsommingswaarden opgeven.

Voorbeelden van pseudocode

using System;
using System.Runtime.InteropServices;

class ExampleClass
{
    [DllImport("The3rdAssembly.dll")]
    [DefaultDllImportSearchPaths(DllImportSearchPath.AssemblyDirectory)]
    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);
    }
}

CA5392: Het kenmerk DefaultDllImportSearchPaths gebruiken voor P/Invokes