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 | CA5370 |
| Başlık | Okuyucuyu doğrulamak için XmlReader kullanma |
| 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üvenilmeyen XML girişi, XmlReader nesnesi olmadan örneklenmiş XmlValidatingReader sınıfıyla doğrulanmaya çalışıldığında hizmet reddi, bilgi sızıntısı ve sunucu tarafı istek sahteciliğine 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. 4.0 sürümünden itibaren .NET Framework'te satır içi XML şeması, XmlReader, ProhibitDtd ve ProcessInlineSchema özelliği ile varsayılan olarak false olarak ayarlanmıştır.
Kural açıklaması
Güvenilmeyen DTD ve XML şemalarının işlenmesi tehlikeli dış başvuruların yüklenmesini sağlayabilir. Bu tehlikeli yükleme XmlReader güvenli bir çözücü ile veya DTD ve XML satır içi şema işleme devre dışı bırakılarak kısıtlanabilir. Bu kural, XmlValidatingReader sınıfını, XmlReader herhangi bir oluşturucu parametresi olarak almadan kullanan kodu algılar.
İhlalleri düzeltme
-
ProhibitDtdveProcessInlineSchemaözelliklerifalseolarak ayarlanmışXmlValidatingReader(XmlReader)kullanın. - .NET Framework 2.0'dan başlayarak
XmlValidatingReader, kullanım dışı olarak kabul edilir. XmlReader.Create ile bir doğrulayıcı okuyucu örneği oluşturabilirsiniz.
Uyarıların ne zaman bastırılması gerekiyor?
"Bu uyarıyı potansiyel olarak gizleyebilirsiniz; eğer XmlValidatingReader, daima güvenilir bir kaynaktan gelen ve bu nedenle üzerinde oynanma ihtimali olmayan XML'i doğrulamak için kullanılıyorsa."
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 CA5370
// The code that's violating the rule is on this line.
#pragma warning restore CA5370
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.CA5370.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ü XmlValidatingReader.XmlValidatingReader() ise XmlReader değildir.
using System;
using System.IO;
using System.Xml;
...
public void TestMethod(Stream xmlFragment, XmlNodeType fragType, XmlParserContext context)
{
var obj = new XmlValidatingReader(xmlFragment, fragType, context);
}
Çözüm
using System;
using System.Xml;
...
public void TestMethod(XmlReader xmlReader)
{
var obj = new XmlValidatingReader(xmlReader);
}