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 | CA2326 |
| Başlık | None dışında bir TypeNameHandling 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
Bu kural, aşağıdaki koşullardan biri karşılandığında tetiklenir:
-
Noneharicinde bir Newtonsoft.Json.TypeNameHandling numaralandırma değerine başvurulmaktadır. - 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, diğer 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'ın
Nonedeğeri 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 kriptografik imzayı doğrulayın. Şifreleme anahtarının açıklanmasını önleyip anahtar döndürmeleri için tasarım yapma.
- Deserialize edilmiş türleri kısıtlayın. Özel bir Newtonsoft.Json.Serialization.ISerializationBinder uygulayın. Json.NET ile seri durumdan çıkarmadan önce, özel ISerializationBinder'ınızın Newtonsoft.Json.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
nulldöndür veya bir özel durum fırlat.- 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, ISerializationBinder kullanarak
Nonedışında diğer TypeNameHandling değerlerini kullanmanızda emin olmanızı sağlar.
- 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, ISerializationBinder kullanarak
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 nasıl düzelteceğiniz konusunda önlemlerden birini aldını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 noneolarak 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 deserileştirme yapmayın
CA2330: JsonSerializer'ı seriden çıkarırken güvenli bir yapılandırmaya sahip olduğundan emin olun