CA5374: XslTransform kullanmayın
Özellik | Değer |
---|---|
Kural Kimliği | CA5374 |
Başlık | XslTransform kullanmayın |
Kategori | Güvenlik |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 9'da varsayılan olarak etkin | Hayır |
Neden
Tehlikeli olabilecek dış başvuruları kısıtlamayan veya betikleri engellemeyen bir System.Xml.Xsl.XslTransformörneği oluşturma.
Kural açıklaması
XslTransform güvenilmeyen girişler üzerinde çalışırken güvenlik açığına neden oluyor. Bir saldırı rastgele kod yürütebilir.
İhlalleri düzeltme
XslTransform öğesini System.Xml.Xsl.XslCompiledTransform ile değiştirin. Daha fazla kılavuz için bkz . XslTransform sınıfından geçiş.
Uyarıların ne zaman bastırılması gerekiyor?
XslTransform Nesne, XSLT stil sayfaları ve XML kaynak verilerinin tümü güvenilir kaynaklardan alınıyor.
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 CA5374
// The code that's violating the rule is on this line.
#pragma warning restore CA5374
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.CA5374.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
Sahte kod örnekleri
Ihlal
Şu anda aşağıdaki sahte kod örneği, bu kural tarafından algılanan deseni göstermektedir.
using System;
using System.Xml;
using System.Xml.XPath;
using System.Xml.Xsl;
namespace TestForXslTransform
{
class Program
{
static void Main(string[] args)
{
// Create a new XslTransform object.
XslTransform xslt = new XslTransform();
// Load the stylesheet.
xslt.Load("https://server/favorite.xsl");
// Create a new XPathDocument and load the XML data to be transformed.
XPathDocument mydata = new XPathDocument("inputdata.xml");
// Create an XmlTextWriter which outputs to the console.
XmlWriter writer = new XmlTextWriter(Console.Out);
// Transform the data and send the output to the console.
xslt.Transform(mydata, null, writer, null);
}
}
}
Çözüm
using System.Xml;
using System.Xml.Xsl;
namespace TestForXslTransform
{
class Program
{
static void Main(string[] args)
{
// Default XsltSettings constructor disables the XSLT document() function
// and embedded script blocks.
XsltSettings settings = new XsltSettings();
// Execute the transform.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("https://server/favorite.xsl", settings, new XmlUrlResolver());
xslt.Transform("inputdata.xml", "outputdata.html");
}
}
}