CA5374: Nepoužívejte XslTransform

Vlastnost Hodnota
ID pravidla CA5374
Název Nepoužívejte XslTransform
Kategorie Zabezpečení
Oprava způsobující chybu nebo chybu způsobující chybu Nenarušující
Povoleno ve výchozím nastavení v .NET 8 No

Příčina

Vytvoření instance objektu System.Xml.Xsl.XslTransform, který neomezuje potenciálně nebezpečné externí odkazy nebo brání skriptům.

Popis pravidla

XslTransform je zranitelná při provozu na nedůvěryhodném vstupu. Útok by mohl provést libovolný kód.

Jak opravit porušení

Nahraďte XslTransformSystem.Xml.Xsl.XslCompiledTransform. Další pokyny najdete v tématu [/dotnet/standard/data/xml/migrating-from-the-xsltransform-class].

Kdy potlačit upozornění

Objekt XslTransform , šablony stylů XSLT a zdrojová data XML jsou všechny z důvěryhodných zdrojů.

Potlačení upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

#pragma warning disable CA5374
// The code that's violating the rule is on this line.
#pragma warning restore CA5374

Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.

[*.{cs,vb}]
dotnet_diagnostic.CA5374.severity = none

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.

Příklady pseudokódu

Porušení

V současné době následující ukázka pseudokódu znázorňuje vzor zjištěný tímto pravidlem.

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

Řešení

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