CA5393: Använd inte osäkert DllImportSearchPath-värde
Property | Värde |
---|---|
Regel-ID | CA5393 |
Title | Använd inte osäkert DllImportSearchPath-värde |
Kategori | Säkerhet |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | 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äsa in 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 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 AssemblyDirectory
eller UseDllDirectoryForDependencies
ApplicationDirectory
lä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);
}
}
Relaterade regler
CA5392: Använd attributet DefaultDllImportSearchPaths för P/Invokes