CA5374: Non usare XslTransform
Proprietà | valore |
---|---|
ID regola | CA5374 |
Title | Non usare XslTransform |
Categoria | Sicurezza |
La correzione causa un'interruzione o meno | Non causa un'interruzione |
Abilitato per impostazione predefinita in .NET 9 | No |
Causa
Creazione di un'istanza System.Xml.Xsl.XslTransformdi , che non limita riferimenti esterni potenzialmente pericolosi o impedisce script.
Descrizione regola
XslTransform è vulnerabile quando si opera su input non attendibile. Un attacco potrebbe eseguire codice arbitrario.
Come correggere le violazioni
Sostituisci XslTransform con System.Xml.Xsl.XslCompiledTransform. Per altre indicazioni, vedere Migrazione dalla classe XslTransform.
Quando eliminare gli avvisi
L'oggetto XslTransform , i fogli di stile XSLT e i dati di origine XML provengono tutte da origini attendibili.
Eliminare un avviso
Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.
#pragma warning disable CA5374
// The code that's violating the rule is on this line.
#pragma warning restore CA5374
Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none
su nel file di configurazione.
[*.{cs,vb}]
dotnet_diagnostic.CA5374.severity = none
Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.
Esempi di pseudo-codice
Violazione
Attualmente, l'esempio di pseudo-codice seguente illustra il modello rilevato da questa regola.
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);
}
}
}
Soluzione
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");
}
}
}