CA5372: XPathDocument için XmlReader kullanma

Özellik Değer
Kural Kimliği CA5372
Başlık XPathDocument 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

Bir XPathDocument sınıfı, XmlReader nesnesi olmadan örneklenmiş şekilde kullanılırsa, hizmet reddi, bilgi ifşası ve sunucu tarafı isteği 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. Satır içi XML şeması işleme, XmlReader ve ProhibitDtd ile ProcessInlineSchema özelliklerinin .NET Framework 4.0 sürümünden başlayarak varsayılan olarak false olarak ayarlandığı bir durumdur. , Streamve TextReader gibi XmlSerializationReaderdiğer seçenekler DTD işlemeyi devre dışı bırakamaz.

Kural açıklaması

Güvenilmeyen verilerden XML işleme, tehlikeli dış başvurular yükleyebilir; bu, güvenli bir XmlReader çözümleyici kullanarak veya DTD işlemesini devre dışı bırakarak kısıtlanabilir. Bu kural sınıfını XPathDocument kullanan kodu algılar ve oluşturucu parametresi olarak almaz XmlReader .

İhlalleri düzeltme

Oluşturucuları kullanın XPathDocument(XmlReader, *) .

Uyarıların ne zaman bastırılması gerekiyor?

XPathDocument nesnesi güvenilir bir kaynaktan gelen ve bu nedenle üzerinde oynanamayacak bir XML dosyasını işlemek için kullanılıyorsa, bu uyarıyı 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 CA5372
// The code that's violating the rule is on this line.
#pragma warning restore CA5372

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.CA5372.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ü XPathDocument ise XmlReader değildir.

using System.IO;
using System.Xml.XPath;
...
public void TestMethod(Stream stream)
{
    var obj = new XPathDocument(stream);
}

Çözüm

using System.Xml;
using System.Xml.XPath;
...
public void TestMethod(XmlReader reader)
{
    var obj = new XPathDocument(reader);
}