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 | CA5371 |
| Başlık | Şema okuma 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
XmlSchema.Read nesnesi XmlReader nesnesi olmadan başlatılmış güvenilmeyen XML girişinin işlenmesi, hizmet reddi, bilgi ifşası ve sunucu tarafında 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. 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 DTD ve XML şemalarının işlenmesi tehlikeli dış başvuruların yüklenmesini sağlayabilir.
XmlReader'ün, güvenli bir çözümleyici ile kullanılması ya da DTD ve XML satır içi şema işleme devre dışı bırakılarak kullanılması bunu kısıtlar. Bu kural, parametresiz XmlSchema.Read yöntemini kullanan XmlReader kodu algılar.
İhlalleri düzeltme
Aşırı yüklemeleri kullanın XmlSchema.Read(XmlReader, *) .
Uyarıların ne zaman bastırılması gerekiyor?
Her zaman güvenilir bir kaynaktan gelen ve bu nedenle üzerinde oynanamayan XML'yi işlemek için XmlSchema.Read yöntemi 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 CA5371
// The code that's violating the rule is on this line.
#pragma warning restore CA5371
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.CA5371.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ü XmlSchema.Read ise XmlReader değildir.
using System.IO;
using System.Xml.Schema;
...
public void TestMethod(Stream stream, ValidationEventHandler validationEventHandler)
{
XmlSchema.Read(stream, validationEventHandler);
}
Çözüm
using System.IO;
using System.Xml.Schema;
...
public void TestMethod(XmlReader reader, ValidationEventHandler validationEventHandler)
{
XmlSchema.Read(reader, validationEventHandler);
}