Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Özellik | Değer |
|---|---|
| Kural Kimliği | CA5393 |
| Başlık | Güvenli olmayan DllImportSearchPath değeri kullanmayın |
| Kategori | Güvenlik |
| Düzeltme bozucu ya da bozmayan olabilir | Kesintisiz |
| .NET 10'da varsayılan olarak etkin | Hayır |
| Geçerli diller | C# ve Visual Basic |
Neden
xref:System.Runtime.InteropServices.DllImportSearchPath?displayProperty=fullName'in <güvenli olmayan değerlerinden birini kullanarak:
AssemblyDirectoryUseDllDirectoryForDependenciesApplicationDirectoryLegacyBehavior
Kural açıklaması
Varsayılan DLL arama dizinlerinde ve derleme dizinlerinde kötü amaçlı bir DLL olabilir. Ya da uygulamanızın nereden çalıştırıldığına bağlı olarak, uygulamanın dizininde kötü amaçlı bir DLL olabilir.
Daha fazla bilgi için bkz. Kitaplığı Güvenli Bir Şekilde Yükleme.
İhlalleri düzeltme
Bunun yerine açık bir arama yolu belirtmek için güvenli değerlerini DllImportSearchPath kullanın:
SafeDirectoriesSystem32UserDirectories
Uyarıların ne zaman bastırılması gerekiyor?
Şu durumda bu kuralı gizlemek güvenlidir:
- Yüklenen montajın istediğiniz olduğundan emin misiniz?
- İçeri aktarılan derleme, user32.dll gibi yaygın olarak kullanılan bir sistem derlemesidir ve arama yolu stratejisi Bilinen DLL'ler mekanizmasını izler.
Uyarıyı gizleme
Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.
#pragma warning disable CA5393
// The code that's violating the rule is on this line.
#pragma warning restore CA5393
Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA5393.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
Kod çözümleme için konfigüre et
Bu kuralın kod tabanınızın hangi bölümlerinde çalıştırılacaklarını yapılandırmak için aşağıdaki seçeneği kullanın.
Bu seçeneği yalnızca bu kural, geçerli olduğu tüm kurallar veya bu kategorideki (Güvenlik) tüm kurallar için yapılandırabilirsiniz. Daha fazla bilgi için bkz . Kod kalitesi kuralı yapılandırma seçenekleri.
Güvenli Olmayan DllImportSearchPath bitleri
Çözümleme için DllImportSearchPath hangi değerin güvenli değil olduğunu yapılandırabilirsiniz. Örneğin, kodun AssemblyDirectoryUseDllDirectoryForDependencies veya ApplicationDirectory kullanmaması gerektiğini belirtmek için, projenizdeki .editorconfig dosyasına aşağıdaki anahtar-değer çiftini ekleyin:
dotnet_code_quality.CA5393.unsafe_DllImportSearchPath_bits = 770
Sabit listesi değerlerinin bit düzeyinde bir bileşiminin tamsayı değerini belirtmeniz gerekir.
Sahte kod örnekleri
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);
}
}
Çözüm
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);
}
}
İlgili kurallar
CA5392: P/Invokes için DefaultDllImportSearchPaths özniteliğini kullanın