Aracılığıyla paylaş


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 8'de 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. [/dotnet/standard/data/xml/migrationing-from-the-xsltransform-class].

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