CA5374: Kein XslTransform verwenden

Eigenschaft Wert
Regel-ID CA5374
Titel Kein XslTransform verwenden
Kategorie Security
Fix führt oder führt nicht zur Unterbrechung Nicht unterbrechend
Standardmäßig in .NET 8 aktiviert Nein

Ursache

Die Instanziierung eines System.Xml.Xsl.XslTransform, das weder potenziell gefährliche externe Verweise einschränkt noch Skripte blockiert.

Regelbeschreibung

Bei der Arbeit mit nicht vertrauenswürdigen Eingaben stellt XslTransform ein Sicherheitsrisiko dar. Bei einem Angriff könnte ein beliebiger Code ausgeführt werden.

Behandeln von Verstößen

Ersetzen Sie XslTransform durch System.Xml.Xsl.XslCompiledTransform. Weitere Informationen finden Sie unter [/dotnet/standard/data/xml/migrating-from-the-xsltransform-class].

Wann sollten Warnungen unterdrückt werden?

Das XslTransform-Objekt, die XSLT-Stylesheets und die XML-Quelldaten stammen aus vertrauenswürdigen Quellen.

Unterdrücken einer Warnung

Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.

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

Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none fest.

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

Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.

Pseudocodebeispiele

Verletzung

Derzeit veranschaulicht das folgende Pseudocodebeispiel das von dieser Regel erkannte Muster.

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

Lösung

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