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 instrucciones, consulte Migración desde la clase XslTransform.
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");
}
}
}