CA5393: Jangan menggunakan nilai DllImportSearchPath yang tidak aman
Properti | Nilai |
---|---|
ID Aturan | CA5393 |
Judul | Jangan gunakan nilai DllImportSearchPath yang tidak aman |
Golongan | Keamanan |
Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
Diaktifkan secara default di .NET 8 | Tidak |
Penyebab
Menggunakan salah satu nilai < yang tidak aman xref:System.Runtime.InteropServices.DllImportSearchPath?displayProperty=fullName:
AssemblyDirectory
UseDllDirectoryForDependencies
ApplicationDirectory
LegacyBehavior
Deskripsi aturan
Mungkin ada DLL berbahaya di direktori pencarian DLL default dan direktori rakitan. Atau, tergantung dari mana aplikasi Anda dijalankan, mungkin ada DLL berbahaya di direktori aplikasi.
Untuk informasi selengkapnya, lihat Memuat Pustaka dengan Aman.
Cara memperbaiki pelanggaran
Gunakan nilai aman DllImportSearchPath untuk menentukan jalur pencarian eksplisit:
SafeDirectories
System32
UserDirectories
Kapan harus menekan peringatan
Aman untuk menyembunyikan aturan ini jika:
- Anda yakin assembly yang dimuat adalah yang Anda inginkan.
- Assembly yang diimpor adalah assembly yang umum digunakan, seperti user32.dll, dan strategi jalur pencarian mengikuti Mekanisme DLL yang diketahui.
Menyembunyikan peringatan
Jika Anda hanya ingin menyembunyikan satu pelanggaran, tambahkan arahan praprosedur ke file sumber Anda untuk dinonaktifkan lalu aktifkan kembali aturannya.
#pragma warning disable CA5393
// The code that's violating the rule is on this line.
#pragma warning restore CA5393
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none
dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA5393.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.
Mengonfigurasi kode yang akan dianalisis
Gunakan opsi berikut untuk mengonfigurasi bagian mana dari codebase Anda yang akan menjalankan aturan ini.
Anda dapat mengonfigurasi opsi ini hanya untuk aturan ini, untuk semua aturan yang berlaku, atau untuk semua aturan dalam kategori ini (Keamanan) yang diterapkannya. Untuk informasi selengkapnya, lihat Opsi konfigurasi aturan kualitas kode.
Bit DllImportSearchPath tidak aman
Anda dapat mengonfigurasi nilai DllImportSearchPath mana yang tidak aman untuk analisis. Misalnya, untuk menentukan bahwa kode tidak boleh menggunakan AssemblyDirectory
, UseDllDirectoryForDependencies
, atau ApplicationDirectory
, tambahkan pasangan kunci-nilai berikut ke file .editorconfig di proyek Anda:
dotnet_code_quality.CA5393.unsafe_DllImportSearchPath_bits = 770
Anda harus menentukan nilai bilangan bulat kombinasi bitwise dari nilai enumerasi.
Contoh kode semu
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);
}
}
Solusi
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);
}
}
Aturan terkait
CA5392: Gunakan atribut DefaultDllImportSearchPaths untuk P/Invokes
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk