Udostępnij za pośrednictwem


CA5393: Nie używaj niebezpiecznej wartości DllImportSearchPath

Właściwości Wartość
Identyfikator reguły CA5393
Tytuł Nie używaj niebezpiecznej wartości DllImportSearchPath
Kategoria Bezpieczeństwo
Poprawka powodująca niezgodność lub niezgodność Niezgodność
Domyślnie włączone na platformie .NET 9 Nie.

Przyczyna

Przy użyciu jednej z niebezpiecznych wartości <xref:System.Runtime.InteropServices.DllImportSearchPath?displayProperty=fullName:

  • AssemblyDirectory
  • UseDllDirectoryForDependencies
  • ApplicationDirectory
  • LegacyBehavior

Opis reguły

W domyślnych katalogach wyszukiwania bibliotek DLL i katalogach zestawów może istnieć złośliwa biblioteka DLL. Lub w zależności od tego, skąd jest uruchamiana aplikacja, może istnieć złośliwa biblioteka DLL w katalogu aplikacji.

Aby uzyskać więcej informacji, zobacz Bezpieczne ładowanie biblioteki.

Jak naprawić naruszenia

Użyj bezpiecznych wartości, DllImportSearchPath aby określić jawną ścieżkę wyszukiwania:

  • SafeDirectories
  • System32
  • UserDirectories

Kiedy pomijać ostrzeżenia

Można bezpiecznie pominąć tę regułę, jeśli:

  • Masz pewność, że załadowany zestaw jest odpowiedni.
  • Zaimportowany zestaw jest często używanym zestawem systemowym, na przykład user32.dll, a strategia ścieżki wyszukiwania jest zgodna z mechanizmem Znane biblioteki DLL.

Pomijanie ostrzeżenia

Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.

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

Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none w pliku konfiguracji.

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

Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.

Konfigurowanie kodu do analizowania

Użyj następującej opcji, aby skonfigurować, które części bazy kodu mają być uruchamiane w tej regule.

Tę opcję można skonfigurować tylko dla tej reguły, dla wszystkich reguł, których dotyczy, lub dla wszystkich reguł w tej kategorii (Zabezpieczenia), których dotyczy. Aby uzyskać więcej informacji, zobacz Opcje konfiguracji reguły jakości kodu.

Niebezpieczne bity DllImportSearchPath

Możesz skonfigurować, która wartość DllImportSearchPath jest niebezpieczna dla analizy. Aby na przykład określić, że kod nie powinien używać AssemblyDirectorymetody lub ApplicationDirectoryUseDllDirectoryForDependencies , dodaj następującą parę klucz-wartość do pliku .editorconfig w projekcie:

dotnet_code_quality.CA5393.unsafe_DllImportSearchPath_bits = 770

Należy określić wartość całkowitą bitowej kombinacji wartości wyliczenia.

Przykłady przykładów kodu przykładowego

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

Rozwiązanie

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: Użyj atrybutu DefaultDllImportSearchPaths dla parametrów P/Invoke