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 Anleitungen finden Sie unter Migrieren aus der XslTransform-Klasse.
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");
}
}
}