Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
| 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
XsltSettingspor 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.