CA5374: Non usare XslTransform

Proprietà valore
ID regola CA5374
Titolo Non usare XslTransform
Categoria Sicurezza
Correzione che causa un'interruzione o un'interruzione Nessuna interruzione
Abilitato per impostazione predefinita in .NET 8 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 [/dotnet/standard/data/xml/migrateing-from-the-xsltransform-class].

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