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ć AssemblyDirectory
metody lub ApplicationDirectory
UseDllDirectoryForDependencies
, 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);
}
}
Powiązane reguły
CA5392: Użyj atrybutu DefaultDllImportSearchPaths dla parametrów P/Invoke