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 | 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);
}