CA2326: TypeNameHandling değerlerini None dışında kullanmayın
Özellik | Değer |
---|---|
Kural Kimliği | CA2326 |
Başlık | None dışında bir TypeNameHandling değeri kullanmayın |
Kategori | Güvenlik |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 9'da varsayılan olarak etkin | Hayır |
Neden
Bu kural, aşağıdaki koşullardan biri karşılandığında tetiklenir:
- Dışında bir Newtonsoft.Json.TypeNameHandling numaralandırma değerine
None
başvurulur. - TypeNameHandling değişkenine sıfır olmayan bir değeri temsil eden bir tamsayı değeri atanır.
Kural açıklaması
Güvenilmeyen verilerin seri durumdan çıkarılması sırasında güvenli olmayan seri durumdan çıkarıcılar savunmasızdır. Saldırgan, kötü amaçlı yan etkilere sahip nesneler eklemek için seri hale getirilmiş verileri beklenmeyen türler içerecek şekilde değiştirebilir. Güvenli olmayan bir seri durumdan çıkarıcıya yönelik bir saldırı, örneğin, temel işletim sisteminde komut yürütebilir, ağ üzerinden iletişim kurabilir veya dosyaları silebilir.
Bu kural, dışındaki None
Newtonsoft.Json.TypeNameHandling değerlerini bulur. Seri durumdan çıkarılmış türleri kısıtlamak için yalnızca Newtonsoft.Json.Serialization.ISerializationBinder belirtildiğinde seri durumdan çıkarmak istiyorsanız, bu kuralı devre dışı bırakın ve bunun yerine CA2327, CA2328, CA2329 ve CA2330 kurallarını etkinleştirin.
İhlalleri düzeltme
- Mümkünse TypeNameHandling değerini
None
kullanın. - Serileştirilmiş verilerin kurcalanmaya karşı dayanıklı olmasını sağlayın. Serileştirmeden sonra, serileştirilmiş verileri şifreli olarak imzalayın. Seri durumdan çıkarmadan önce şifreleme imzasını doğrulayın. Şifreleme anahtarının açıklanmasını önleyip anahtar döndürmeleri için tasarım yapma.
- Seri durumdan çıkarılmış türleri kısıtlayın. Özel bir Newtonsoft.Json.Serialization.ISerializationBinder uygulayın. Json.NET seri durumdan çıkarmadan önce özel ISerializationBinder'ınızın Newtonsoft.JsonSerializerSettings.SerializationBinder özelliğinde belirtildiğinden emin olun. Geçersiz kılınan Newtonsoft.Json.Serialization.ISerializationBinder.BindToType yönteminde, tür beklenmeyense seri durumdan çıkarma işlemini durdurmak için bir özel durum döndür veya
null
oluştur.- Seri durumdan çıkarılmış türleri kısıtlarsanız, bu kuralı devre dışı bırakmak ve CA2327, CA2328, CA2329 ve CA2330 kurallarını etkinleştirmek isteyebilirsiniz. Kurallar CA2327, CA2328, CA2329 ve CA2330, dışındaki
None
TypeNameHandling değerlerini kullanırken ISerializationBinder kullandığınızdan emin olmanıza yardımcı olur.
- Seri durumdan çıkarılmış türleri kısıtlarsanız, bu kuralı devre dışı bırakmak ve CA2327, CA2328, CA2329 ve CA2330 kurallarını etkinleştirmek isteyebilirsiniz. Kurallar CA2327, CA2328, CA2329 ve CA2330, dışındaki
Uyarıların ne zaman bastırılması gerekiyor?
Aşağıdakiler durumunda bu kuraldan gelen bir uyarıyı engellemek güvenlidir:
- Girişin güvenilir olduğunu biliyorsunuz. Uygulamanızın güven sınırının ve veri akışlarının zaman içinde değişebileceğini göz önünde bulundurun.
- İhlalleri düzeltme bölümünde yer alan önlemlerden birini aldıysanız.
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 CA2326
// The code that's violating the rule is on this line.
#pragma warning restore CA2326
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.CA2326.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
Sahte kod örnekleri
Ihlal
using Newtonsoft.Json;
public class ExampleClass
{
public JsonSerializerSettings Settings { get; }
public ExampleClass()
{
Settings = new JsonSerializerSettings();
Settings.TypeNameHandling = TypeNameHandling.All; // CA2326 violation.
}
}
Imports Newtonsoft.Json
Public Class ExampleClass
Public ReadOnly Property Settings() As JsonSerializerSettings
Public Sub New()
Settings = New JsonSerializerSettings()
Settings.TypeNameHandling = TypeNameHandling.All ' CA2326 violation.
End Sub
End Class
Çözüm
using Newtonsoft.Json;
public class ExampleClass
{
public JsonSerializerSettings Settings { get; }
public ExampleClass()
{
Settings = new JsonSerializerSettings();
// The default value of Settings.TypeNameHandling is TypeNameHandling.None.
}
}
Imports Newtonsoft.Json
Public Class ExampleClass
Public ReadOnly Property Settings() As JsonSerializerSettings
Public Sub New()
Settings = New JsonSerializerSettings()
' The default value of Settings.TypeNameHandling is TypeNameHandling.None.
End Sub
End Class
İlgili kurallar
CA2327: Güvenli olmayan JsonSerializerSettings kullanmayın
CA2328: JsonSerializerSettings'in güvenli olduğundan emin olun
CA2329: Güvenli olmayan bir yapılandırma kullanarak JsonSerializer ile seri durumdan çıkarma
CA2330: Seri durumdan çıkarırken JsonSerializer'ın güvenli bir yapılandırması olduğundan emin olun