Compartir por


Consideraciones de seguridad de XSLT

El lenguaje XSLT tiene un amplio conjunto de características que le proporcionan una gran cantidad de potencia y flexibilidad. Incluye muchas características que, aunque son útiles, también pueden ser aprovechadas por orígenes externos. Para poder usar XSLT de forma segura, debe comprender los tipos de problemas de seguridad que surgen al usar XSLT y las estrategias básicas que puede emplear para mitigar estos riesgos.

Extensiones XSLT

Dos extensiones XSLT populares son scripts de hojas de estilos y objetos de extensión. Estas extensiones permiten que el procesador XSLT ejecute código.

  • Los objetos de extensión agregan funcionalidades de programación a las transformaciones XSL.

  • Los scripts se pueden incrustar en la hoja de estilos utilizando el elemento de extensión msxsl:script.

Objetos de extensión

Los objetos de extensión se agregan mediante el AddExtensionObject método . El conjunto de permisos FullTrust es necesario para admitir objetos de extensión. Esto garantiza que la elevación de permisos no se produce cuando se ejecuta el código de objeto de extensión. Si se intenta llamar al AddExtensionObject método sin permisos FullTrust, se produce una excepción de seguridad.

Scripts de hoja de estilos

Los scripts se pueden incrustar en una hoja de estilos mediante el elemento de extensión msxsl:script. La compatibilidad con scripts es una característica opcional en la XslCompiledTransform clase que está deshabilitada de forma predeterminada. El scripting se puede habilitar configurando la propiedad XsltSettings.EnableScript a true y pasando el objeto XsltSettings al método Load.

Nota:

Los bloques de script solo se admiten en .NET Framework. No se admiten en .NET Core o .NET 5 o versiones posteriores.

Directrices

Habilite el scripting solo cuando la hoja de estilos proceda de un origen de confianza. Si no puede comprobar el origen de la hoja de estilos o si la hoja de estilos no procede de un origen de confianza, pase null para el argumento de configuración XSLT.

Recursos externos

El lenguaje XSLT tiene características como xsl:import, xsl:includeo la document() función , donde el procesador necesita resolver las referencias de URI. La XmlResolver clase se usa para resolver recursos externos. Es posible que sea necesario resolver recursos externos en los dos casos siguientes:

  • Al compilar una hoja de estilos, el XmlResolver se utiliza para la resolución de xsl:import y xsl:include.

  • Al ejecutar la transformación, XmlResolver se usa para resolver la document() función.

    Nota:

    La document() función está deshabilitada de forma predeterminada en la XslCompiledTransform clase . Esta característica se puede habilitar estableciendo la propiedad XsltSettings.EnableDocumentFunction a true y pasando el objeto XsltSettings al método Load.

Los métodos Load y Transform incluyen sobrecargas que aceptan XmlResolver como uno de sus argumentos. Si no se especifica un XmlResolver, se utilizará un valor predeterminado XmlUrlResolver sin credenciales.

Directrices

Habilite la document() función solo cuando la hoja de estilos proceda de un origen de confianza.

En la lista siguiente se describe cuándo puede especificar un XmlResolver objeto:

  • Si el proceso XSLT necesita acceder a un recurso de red que requiere autenticación, puede usar un XmlResolver con las credenciales necesarias.

  • Si desea restringir los recursos a los que puede acceder el proceso XSLT, puede usar un XmlSecureResolver con el conjunto de permisos correcto. Use la XmlSecureResolver clase si necesita abrir un recurso que no controla o que no es de confianza.

  • Si desea personalizar el comportamiento, puede implementar su propia XmlResolver clase y usarla para resolver los recursos.

  • Si desea asegurarse de que no se tiene acceso a ningún recurso externo, puede especificar null para el XmlResolver argumento .

Consulte también