Share via


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

Property Värde
Regel-ID CA5393
Rubrik Använd inte osäkert DllImportSearchPath-värde
Kategori Säkerhet
Korrigeringen är icke-bakåtkompatibel Icke-icke-bryta
Aktiverad som standard i .NET 8 Nej

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 Läs in bibliotek Valv ly.

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 sammansättningen är det du vill ha.
  • 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