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 | CA2353 |
| Başlık | Seri duruma getirilebilir türdeki güvenli olmayan DataSet veya DataTable |
| 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
XML serileştirme özniteliği veya veri sözleşmesi özniteliği ile işaretlenmiş bir sınıf veya yapı, bir DataSet alanı ya da DataTable özelliği içerir.
XML serileştirme öznitelikleri şunlardır:
- XmlAnyAttributeAttribute
- XmlAnyElementAttribute
- XmlArrayAttribute
- XmlArrayItemAttribute
- XmlChoiceIdentifierAttribute
- XmlElementAttribute
- XmlEnumAttribute
- XmlIgnoreAttribute
- XmlIncludeAttribute
- XmlRootAttribute
- XmlTextAttribute
- XmlTypeAttribute
Veri sözleşmesi serileştirme öznitelikleri şunlardır:
Kural açıklaması
Güvenilmeyen girişi deserilize ederken ve deserilize edilmiş nesne grafı DataSet veya DataTable içerdiğinde, bir saldırgan hizmet reddi saldırısı gerçekleştirmek için kötü amaçlı bir yük hazırlayarak oluşturabilir. Bilinmeyen uzaktan kod yürütme güvenlik açıkları olabilir.
Bu kural, serileştirilmediğinde güvenli olmayan türleri bulur. Kodunuz bulunan türleri seri durumdan çıkarmıyorsa seri durumdan çıkarma güvenlik açığınız yoktur.
Daha fazla bilgi için bkz . DataSet ve DataTable güvenlik kılavuzu.
İhlalleri düzeltme
- Mümkünse Entity Framework kullanın ve DataSet ve DataTable yerine.
- 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.
Uyarıların ne zaman bastırılması gerekiyor?
Aşağıdakiler durumunda bu kuraldan gelen bir uyarıyı engellemek güvenlidir:
- Bu kural tarafından bulunan tür hiçbir zaman doğrudan veya dolaylı olarak seri durumdan çıkarılmaz.
- 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 CA2353
// The code that's violating the rule is on this line.
#pragma warning restore CA2353
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.CA2353.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
Sahte kod örnekleri
Ihlal
using System.Data;
using System.Runtime.Serialization;
[XmlRoot]
public class MyClass
{
public DataSet MyDataSet { get; set; }
}
İlgili kurallar
CA2350: DataTable.ReadXml() girişinin güvenilir olduğundan emin olun
CA2351: DataSet.ReadXml() girişinin güvenilir olduğundan emin olun
CA2355: Deserilize edilmiş nesne grafiğinde güvenli olmayan DataSet veya DataTable
CA2356: Web seri durumdan çıkarılmış nesne grafında güvenli olmayan DataSet veya DataTable