Teilen über


CA5393: Keinen unsicheren DllImportSearchPath-Wert verwenden.

Eigenschaft Wert
Regel-ID CA5393
Titel Keinen unsicheren DllImportSearchPath-Wert verwenden.
Kategorie Security
Fix führt oder führt nicht zur Unterbrechung Nicht unterbrechend
Standardmäßig in .NET 8 aktiviert Nein

Ursache

Verwenden Sie einen der unsicheren Werte <xref:System.Runtime.InteropServices.DllImportSearchPath?displayProperty=fullName:

  • AssemblyDirectory
  • UseDllDirectoryForDependencies
  • ApplicationDirectory
  • LegacyBehavior

Regelbeschreibung

Die standardmäßigen DLL-Suchverzeichnisse und Assembly-Verzeichnisse könnten eine schädliche DLL enthalten. Je nachdem, von wo aus Ihre Anwendung ausgeführt wird, könnte sich auch im Verzeichnis der Anwendung eine schädliche DLL befinden.

Weitere Informationen finden Sie unter sicheres Laden der Bibliothek.

Behandeln von Verstößen

Verwenden Sie sichere Werte von DllImportSearchPath, um stattdessen einen expliziten Suchpfad anzugeben:

  • SafeDirectories
  • System32
  • UserDirectories

Wann sollten Warnungen unterdrückt werden?

Es ist sicher, diese Regel zu unterdrücken, wenn Folgendes gilt:

  • Sie sind sicher, dass die geladene Assembly die gewünschte ist.
  • Die importierte Assembly ist eine häufig verwendete System-Assembly, wie z. b. user32.dll, und die Suchpfad-Strategie folgt dem bekannten DLLs-Mechanismus.

Unterdrücken einer Warnung

Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.

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

Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none fest.

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

Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.

Konfigurieren des zu analysierenden Codes

Mithilfe der folgenden Option können Sie konfigurieren, für welche Teile Ihrer Codebasis diese Regel ausgeführt werden soll.

Sie können diese Optionen nur für diese Regel, für alle zutreffenden Regeln oder für alle zutreffenden Regeln in dieser Kategorie (Sicherheit) konfigurieren. Weitere Informationen finden Sie unter Konfigurationsoptionen für die Codequalitätsregel.

Unsichere DllImportSearchPath-Bits

Sie können konfigurieren, welcher Wert von DllImportSearchPath für die Analyse unsicher ist. Um beispielsweise festzulegen, dass der Code nicht AssemblyDirectory, UseDllDirectoryForDependencies oder ApplicationDirectory verwenden soll, fügen Sie das folgende Schlüssel-Wert-Paar zu einer .editorconfig-Datei in Ihrem Projekt hinzu:

dotnet_code_quality.CA5393.unsafe_DllImportSearchPath_bits = 770

Sie müssen den Integer-Wert einer bitweisen Kombination der Werte der Enumeration angeben.

Pseudocodebeispiele

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ösung

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: DefaultDllImportSearchPaths-Attribut für P/Invokes verwenden.