CA5378: ServicePointManagerSecurityProtocols'ı devre dışı bırakma
Özellik | Değer |
---|---|
Kural Kimliği | CA5378 |
Başlık | ServicePointManagerSecurityProtocols'u Devre Dışı Bırakma |
Kategori | Güvenlik |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 9'da varsayılan olarak etkin | Hayır |
Neden
Yöntem AppContext.SetSwitch çağrısı olarak ayarlır Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols
true
.
Varsayılan olarak, bu kural tüm kod tabanını analiz eder, ancak bu yapılandırılabilir.
Kural açıklaması
true
Windows İletişim Çerçevesi 'nin (WCF) Aktarım Katmanı Güvenliği (TLS) bağlantılarını TLS 1.0 ile sınırlandırmak için ayarıSwitch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols
. TLS'nin bu sürümü kullanım dışı bırakılacaktır. Daha fazla bilgi için bkz . .NET Framework ile Aktarım Katmanı Güvenliği (TLS) en iyi yöntemleri.
İhlalleri düzeltme
- Uygulamanız .NET Framework v4.7 veya sonraki bir sürümü hedeflediyse, yöntem çağrısını AppContext.SetSwitch kaldırabilir veya anahtarın değerini olarak
false
ayarlayabilirsiniz. - Uygulamanız .NET Framework v4.6.2 veya önceki bir sürümü hedeflediyse ve .NET Framework v4.7 veya sonraki bir sürümde çalışıyorsa, anahtarın değerini olarak
false
ayarlayın. - Aksi takdirde, azaltmalar için .NET Framework ile Aktarım Katmanı Güvenliği (TLS) en iyi yöntemlerine bakın.
Uyarıların ne zaman bastırılması gerekiyor?
Güvenli TLS yapılandırmalarını kullanmak için yükseltilmeyen eski bir hizmete bağlanmanız gerekiyorsa bu uyarıyı gizleyebilirsiniz.
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 CA5378
// The code that's violating the rule is on this line.
#pragma warning restore CA5378
Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini none
olarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA5378.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
Çözümlemek için kod yapılandırma
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çenekleri kullanın.
Bu seçenekleri 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.
Belirli simgeleri hariç tutma
Türler ve yöntemler gibi belirli simgeleri analizden hariç tutabilirsiniz. Örneğin, kuralın adlı MyType
türlerdeki herhangi bir kodda çalışmaması gerektiğini belirtmek için, projenizdeki bir .editorconfig dosyasına aşağıdaki anahtar-değer çiftini ekleyin:
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType
Seçenek değerinde izin verilen simge adı biçimleri (ile |
ayrılmış):
- Yalnızca sembol adı (içeren tür veya ad alanı ne olursa olsun, ada sahip tüm simgeleri içerir).
- Simgenin belge kimliği biçimindeki tam adlar. Her simge adı için yöntemler
T:
, türler veN:
ad alanları gibiM:
bir sembol türü ön eki gerekir. .ctor
oluşturucular ve.cctor
statik oluşturucular için.
Örnekler:
Seçenek Değeri | Özet |
---|---|
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType |
adlı MyType tüm simgelerle eşleşir. |
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType1|MyType2 |
veya MyType2 adlı MyType1 tüm simgelerle eşleşir. |
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS.MyType.MyMethod(ParamType) |
Belirtilen tam imza ile belirli bir yöntemi MyMethod eşleştirir. |
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS1.MyType1.MyMethod1(ParamType)|M:NS2.MyType2.MyMethod2(ParamType) |
Belirli yöntemlerle MyMethod1 ve MyMethod2 ilgili tam imzalarla eşleşir. |
Belirli türleri ve türetilmiş türlerini dışlama
Belirli türleri ve türetilmiş türlerini analizden dışlayabilirsiniz. Örneğin, kuralın adlı MyType
ve türetilmiş türleri içindeki hiçbir yöntemde çalışmaması gerektiğini belirtmek için, projenizdeki bir .editorconfig dosyasına aşağıdaki anahtar-değer çiftini ekleyin:
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType
Seçenek değerinde izin verilen simge adı biçimleri (ile |
ayrılmış):
- Yalnızca tür adı (içeren tür veya ad alanına bakılmaksızın adı olan tüm türleri içerir).
- Simgenin belge kimliği biçiminde, isteğe bağlı
T:
ön ek içeren tam adlar.
Örnekler:
Seçenek Değeri | Özet |
---|---|
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType |
Adlı MyType tüm türleri ve türetilmiş türlerinin tümünü eşleştirir. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType1|MyType2 |
veya MyType2 adlı MyType1 tüm türleri ve türetilmiş türlerinin tümünü eşleştirir. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS.MyType |
Belirli bir türü MyType verilen tam adla ve türetilmiş tüm türleriyle eşleştirir. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS1.MyType1|M:NS2.MyType2 |
Belirli türleri MyType1 ve MyType2 ilgili tam adlarla ve bunların türetilmiş tüm türleriyle eşleşir. |
Sahte kod örnekleri
Ihlal
using System;
public class ExampleClass
{
public void ExampleMethod()
{
// CA5378 violation
AppContext.SetSwitch("Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols", true);
}
}
Imports System
Public Class ExampleClass
Public Sub ExampleMethod()
' CA5378 violation
AppContext.SetSwitch("Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols", true)
End Sub
End Class
Çözüm
using System;
public class ExampleClass
{
public void ExampleMethod()
{
AppContext.SetSwitch("Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols", false);
}
}
Imports System
Public Class ExampleClass
Public Sub ExampleMethod()
AppContext.SetSwitch("Switch.System.ServiceModel.DisableUsingServicePointManagerSecurityProtocols", false)
End Sub
End Class