Condividi tramite


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