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 9 | 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 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 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 ApplicationDirectory
voegt 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);
}
}
Gerelateerde regels
CA5392: Het kenmerk DefaultDllImportSearchPaths gebruiken voor P/Invokes