Compartir vía


CA3076: Ejecución del script XSLT no segura

Propiedad Value
Identificador de la regla CA3076
Título Ejecución del script XSLT no segura
Categoría Seguridad
La corrección interrumpe o no interrumpe Poco problemático
Habilitado de forma predeterminada en .NET 10 No

Causa

Si ejecuta Transformaciones de lenguaje de hojas de estilos extensibles (XSLT) en aplicaciones .NET de forma no segura, el procesador podría resolver referencias de URI que no son de confianza que podrían revelar información confidencial a los atacantes, lo que conduce a ataques por denegación de servicio y entre sitios. Para obtener más información, consulte Consideraciones de seguridad de XSLT (Guía de .NET).

Descripción de la regla

XSLT es un estándar de World Wide Web Consortium (W3C) para transformar datos XML. XSLT normalmente se usa para escribir hojas de estilos para transformar datos XML en otros formatos, como HTML, texto de longitud fija, texto separado por comas o un formato XML distinto. Aunque está prohibido de forma predeterminada, puede optar por habilitarlo para el proyecto.

Para garantizar que no expone una superficie a ataques, esta regla se desencadena cada vez que XslCompiledTransform.Load recibe instancias de combinación no seguras de XsltSettings y XmlResolver, lo que permite el procesamiento de scripts malintencionados.

Cómo corregir infracciones

  • Reemplace el argumento no seguro XsltSettings por XsltSettings.Default o por una instancia deshabilitada de la función de documento y la ejecución del script.
  • Reemplace el argumento XmlResolver por NULL o una instancia XmlSecureResolver .

Cuándo suprimir las advertencias

A menos que esté seguro de que la entrada es de un origen de confianza, no suprima ninguna regla de esta advertencia.

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 CA3076
// The code that's violating the rule is on this line.
#pragma warning restore CA3076

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.CA3076.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 que usa XsltSettings.TrustedXslt

using System.Xml;
using System.Xml.Xsl;

namespace TestNamespace
{
    class TestClass
    {
         void TestMethod()
        {
             XslCompiledTransform xslCompiledTransform = new XslCompiledTransform();
             var settings = XsltSettings.TrustedXslt;
             var resolver = new XmlUrlResolver();
             xslCompiledTransform.Load("testStylesheet", settings, resolver); // warn
        }
    }
}

Solución que usa XsltSettings.Default

using System.Xml;
using System.Xml.Xsl;

namespace TestNamespace
{
    class TestClass
    {
        void TestMethod()
        {
            XslCompiledTransform xslCompiledTransform = new XslCompiledTransform();
            var settings = XsltSettings.Default;
            var resolver = new XmlUrlResolver();
            xslCompiledTransform.Load("testStylesheet", settings, resolver);
        }
    }
}

Infracción: función de documento y ejecución de script no deshabilitada

using System.Xml;
using System.Xml.Xsl;

namespace TestNamespace
{
    class TestClass
    {
        private static void TestMethod(XsltSettings settings)
        {
            try
            {
                XslCompiledTransform xslCompiledTransform = new XslCompiledTransform();
                var resolver = new XmlUrlResolver();
                xslCompiledTransform.Load("testStylesheet", settings, resolver); // warn
            }
            catch { throw; }
            finally { }
        }
    }
}

Solución: deshabilitar la función de documento y la ejecución de script

using System.Xml;
using System.Xml.Xsl;

namespace TestNamespace
{
    class TestClass
    {
        private static void TestMethod(XsltSettings settings)
        {
            try
            {
                XslCompiledTransform xslCompiledTransform = new XslCompiledTransform();
                settings.EnableDocumentFunction = false;
                settings.EnableScript = false;
                var resolver = new XmlUrlResolver();
                xslCompiledTransform.Load("testStylesheet", settings, resolver);
            }
            catch { throw; }
            finally { }
        }
    }
}

Nota:

A partir de .NET 10, la EnableScript propiedad se marca como obsoleta y genera una advertencia SYSLIB0062. En .NET (Core), ya no es necesario establecer explícitamente esta propiedad false en, ya que no se admite la ejecución del script.

Consulte también