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 | CA2310 |
| Başlık | Güvenli olmayan seri kaldırıcı NetDataContractSerializer 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
Bir System.Runtime.Serialization.NetDataContractSerializer deserileştirme yöntemi çağrıldı veya referans alındı.
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 System.Runtime.Serialization.NetDataContractSerializer seri durumdan çıkarma yöntemi çağrılarını veya başvurularını bulur. Yalnızca Binder özelliği türleri kısıtlamak için ayarlandığında serileştirme yapmak istiyorsanız, bu kuralı devre dışı bırakın ve bunun yerine CA2311 ve CA2312 kurallarını etkinleştirin. Hangi türlerin seri durumdan çıkarılabileceğini sınırlamak, bilinen uzaktan kod yürütme saldırılarına karşı azaltmaya yardımcı olabilir, ancak seri durumdan çıkarma işleminiz hizmet reddi saldırılarına karşı savunmasız olmaya devam eder.
NetDataContractSerializer güvenli değildir ve güvenli hale getirilemiyor. Daha fazla bilgi için bkz . BinaryFormatter güvenlik kılavuzu.
İhlalleri düzeltme
- Bunun yerine güvenli bir seri hale getirici kullanın ve bir saldırganın serileştirilmiş verileri rastgele bir türe dönüştürmesine izin vermeyin. Daha fazla bilgi için bkz . Tercih edilen alternatifler.
- 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.
- Bu seçenek, gelecekte kodu hizmet reddi saldırılarına ve olası uzaktan kod yürütme saldırılarına karşı savunmasız hale getirir. Daha fazla bilgi için bkz . BinaryFormatter güvenlik kılavuzu. Deserialize edilmiş türleri kısıtlayın. Bir özel System.Runtime.Serialization.SerializationBinder uygulayın. Serileştirmeyi geri almadan önce,
Binderözelliğini tüm kod yollarında kendi özel SerializationBinder örneğinize ayarlayın. Geçersiz kılınan BindToType yönteminde, tür beklenmeyense seri durumdan çıkarma işlemini durdurmak için bir istisna atın.
Uyarıların ne zaman bastırılması gerekiyor?
NetDataContractSerializer güvenli değildir ve güvenli hale getirilemiyor.
Sahte kod örnekleri
Ihlal
using System.IO;
using System.Runtime.Serialization;
public class ExampleClass
{
public object MyDeserialize(byte[] bytes)
{
NetDataContractSerializer serializer = new NetDataContractSerializer();
return serializer.Deserialize(new MemoryStream(bytes));
}
}
Imports System.IO
Imports System.Runtime.Serialization
Public Class ExampleClass
Public Function MyDeserialize(bytes As Byte()) As Object
Dim serializer As NetDataContractSerializer = New NetDataContractSerializer()
Return serializer.Deserialize(New MemoryStream(bytes))
End Function
End Class
İlgili kurallar
CA2311: NetDataContractSerializer.Binder'ı ayarlamadan seri durumdan çıkarmayın
CA2312: Seri durumdan çıkarmadan önce NetDataContractSerializer.Binder'ın ayarlandığından emin olun