CA5393: Använd inte osäkert DllImportSearchPath-värde

Egenskap Värde
Regel-ID CA5393
Title Använd inte osäkert DllImportSearchPath-värde
Kategori Säkerhet
Korrigeringen är antingen invasiv eller icke-invasiv Oumbrytbar
Aktiverad som standard i .NET 10 Nej
Tillämpliga språk C# och Visual Basic

Orsak

Använda ett av de osäkra värdena för <xref:System.Runtime.InteropServices.DllImportSearchPath?displayProperty=fullName:

  • AssemblyDirectory
  • UseDllDirectoryForDependencies
  • ApplicationDirectory
  • LegacyBehavior

Regelbeskrivning

Det kan finnas en skadlig DLL i standardkatalogerna för DLL-sökning och sammansättningskataloger. Eller, beroende på var ditt program körs från, kan det finnas en skadlig DLL i programmets katalog.

Mer information finns i Ladda bibliotek på ett säkert sätt.

Så här åtgärdar du överträdelser

Använd säkra värden DllImportSearchPath för för att ange en explicit sökväg i stället:

  • SafeDirectories
  • System32
  • UserDirectories

När du ska ignorera varningar

Det är säkert att ignorera den här regeln om:

  • Du är säker på att den inlästa assemblyn är den du avser.
  • Den importerade sammansättningen är en vanlig systemsammansättning, till exempel user32.dll, och sökvägsstrategin följer mekanismen Kända DLL:er.

Ignorera en varning

Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.

#pragma warning disable CA5393
// The code that's violating the rule is on this line.
#pragma warning restore CA5393

Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.

[*.{cs,vb}]
dotnet_diagnostic.CA5393.severity = none

Mer information finns i Så här utelämnar du kodanalysvarningar.

Konfigurera kod för analys

Använd följande alternativ för att konfigurera vilka delar av kodbasen som regeln ska köras på.

Du kan konfigurera det här alternativet för bara den här regeln, för alla regler som den gäller för eller för alla regler i den här kategorin (säkerhet) som den gäller för. Mer information finns i Konfigurationsalternativ för kodkvalitetsregel.

Osäkra DllImportSearchPath-bitar

Du kan konfigurera vilket värde som DllImportSearchPath är osäkert för analysen. Om du till exempel vill ange att koden inte ska använda AssemblyDirectoryeller UseDllDirectoryForDependenciesApplicationDirectorylägger du till följande nyckel/värde-par i en .editorconfig-fil i projektet:

dotnet_code_quality.CA5393.unsafe_DllImportSearchPath_bits = 770

Du bör ange heltalsvärdet för en bitvis kombination av uppräkningsvärdena.

Exempel på pseudokod

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

Lösning

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: Använd attributet DefaultDllImportSearchPaths för P/Invokes