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 | CA5369 |
| Başlık | Seri durumdan çıkarmak için XmlReader'ı kullanı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
Güvenilir olmayan XML girişinin, bir XmlSerializer.Deserialize nesnesi olmadan XmlReader ile seri durumdan çıkarılması, hizmet engellemesine, bilgilerin açığa çıkmasına veya sunucu tarafı istek sahteciliği saldırılarına yol açabilir. Bu saldırılar, XML bombalarının ve kötü amaçlı dış varlıkların XML'ye eklenmesini sağlayan güvenilmeyen DTD ve XML şeması işleme tarafından etkinleştirilir. Yalnızca XmlReader ile DTD'yi devre dışı bırakmak mümkündür. .NET Framework sürüm 4.0 ve sonrasındaki satır içi XML şeması işleme, XmlReader ve ProhibitDtd özellikleri varsayılan olarak false ayarlandığında gerçekleşir. , Streamve TextReader gibi XmlSerializationReaderdiğer seçenekler DTD işlemeyi devre dışı bırakamaz.
Kural açıklaması
Güvenilmeyen DTD ve XML şemalarının işlenmesi tehlikeli dış başvuruların yüklenmesine olanak tanıyabilir. Bu, güvenli bir çözümleyici ile veya DTD ve XML satır içi şema işleme devre dışı bırakılarak kısıtlanmalıdır XmlReader . Bu kural, XmlSerializer.Deserialize yöntemini kullanan kodu algılar ve XmlReader'i bir oluşturucu parametresi olarak almadığını tespit eder.
İhlalleri düzeltme
Bu XmlSerializer.Deserialize, Deserialize(XmlReader), Deserialize(XmlReader, String), veya Deserialize(XmlReader, XmlDeserializationEvents) dışında başka aşırı yüklemeler kullanmayın.
Uyarıların ne zaman bastırılması gerekiyor?
Ayrıştırılan XML güvenilir bir kaynaktan geliyorsa ve bu nedenle üzerinde oynanamazsa, bu uyarıyı potansiyel olarak 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 CA5369
// The code that's violating the rule is on this line.
#pragma warning restore CA5369
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.CA5369.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
Sahte kod örnekleri
Ihlal
Aşağıdaki sahte kod örneği, bu kural tarafından algılanan deseni gösterir.
İlk parametrenin türü XmlSerializer.Deserialize veya XmlReader ya da XmlReader'den türetilmiş bir sınıf değildir.
using System.IO;
using System.Xml.Serialization;
...
new XmlSerializer(typeof(TestClass).Deserialize(new FileStream("filename", FileMode.Open));
Çözüm
using System.IO;
using System.Xml;
using System.Xml.Serialization;
...
new XmlSerializer(typeof(TestClass)).Deserialize(XmlReader.Create (new FileStream("filename", FileMode.Open)));