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 XslTransform System.Xml.Xsl.XslCompiledTransform. Další pokyny naleznete v tématu Migrace z XslTransform třídy.
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");
}
}
}