CA5370: Okuyucu doğrulama için XmlReader kullanma
Özellik | Değer |
---|---|
Kural Kimliği | CA5370 |
Başlık | Okuyucuyu doğrulamak için XmlReader kullanma |
Kategori | Güvenlik |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 9'da varsayılan olarak etkin | Hayır |
Neden
Nesne olmadan XmlValidatingReader
örneği oluşturulmuş sınıfla güvenilmeyen XML girişinin XmlReader
doğrulanması hizmet reddine, bilgilerin açığa çıkmasına 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 ile DTD'yi XmlReader
devre dışı bırakmak mümkündür. 4.0 sürümünden XmlReader
itibaren .NET Framework'te ve ProhibitDtd
özelliği varsayılan olarak olarak ayarlanmış ProcessInlineSchema
olarak satır içi XML şeması işlemefalse
.
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, güvenli bir çözümleyici ile veya DTD ve XML satır içi şema işleme devre dışı bırakılarak kısıtlanabilir XmlReader
. Bu kural, oluşturucu parametresi olmadan XmlValidatingReader
sınıfını XmlReader
kullanan kodu algılar.
İhlalleri düzeltme
- ve
XmlValidatingReader(XmlReader)
özellikleri olarak ayarlanmış olarakProhibitDtd
ProcessInlineSchema
kullanınfalse
. - .NET Framework 2.0'dan başlayarak kullanım
XmlValidatingReader
dışı olarak kabul edilir. ile XmlReader.Createdoğrulayıcı bir okuyucu örneği oluşturabilirsiniz.
Uyarıların ne zaman bastırılması gerekiyor?
her zaman güvenilir bir kaynaktan gelen XML'i doğrulamak için kullanılırsa ve bu nedenle üzerinde oynanamazsa XmlValidatingReader
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 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 none
olarak 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 parametresinin XmlValidatingReader.XmlValidatingReader()
türü değildir XmlReader
.
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);
}