CA5374: No utilizar XslTransform

Propiedad Value
Identificador de la regla CA5374
Título No utilizar XslTransform
Categoría Seguridad
La corrección interrumpe o no interrumpe Poco problemático
Habilitado de forma predeterminada en .NET 8 No

Causa

Crear instancias de System.Xml.Xsl.XslTransform, que no restringe las referencias externas potencialmente peligrosas ni evita scripts.

Descripción de la regla

XslTransform es vulnerable cuando se trabaja con una entrada que no es de confianza. Un ataque podría ejecutar código arbitrario.

Cómo corregir infracciones

Reemplace XslTransform por System.Xml.Xsl.XslCompiledTransform. Para obtener más información, consulte [/dotnet/standard/data/xml/migrating-from-the-xsltransform-class].

Cuándo suprimir las advertencias

El objeto XslTransform, las hojas de estilos XSLT y los datos de origen XML son todos orígenes de confianza.

Supresión de una advertencia

Si solo quiere suprimir una única infracción, agregue directivas de preprocesador al archivo de origen para deshabilitar y volver a habilitar la regla.

#pragma warning disable CA5374
// The code that's violating the rule is on this line.
#pragma warning restore CA5374

Para deshabilitar la regla de un archivo, una carpeta o un proyecto, establezca su gravedad en none del archivo de configuración.

[*.{cs,vb}]
dotnet_diagnostic.CA5374.severity = none

Para obtener más información, consulte Procedimiento para suprimir advertencias de análisis de código.

Ejemplos de pseudocódigo

Infracción

Actualmente, el pseudocódigo de ejemplo siguiente muestra el patrón que detecta esta regla.

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

Solución

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