Considerações de segurança XSLT
A linguagem XSLT tem um rico conjunto de recursos que lhe dão uma grande dose de poder e flexibilidade. Inclui muitas funcionalidades que, embora úteis, também podem ser exploradas por fontes externas. Para usar o XSLT com segurança, você deve entender os tipos de problemas de segurança que surgem ao usar o XSLT e as estratégias básicas que você pode empregar para mitigar esses riscos.
Extensões XSLT
Duas extensões XSLT populares são objetos de extensão e script de folha de estilo. Essas extensões permitem que o processador XSLT execute código.
Os objetos de extensão adicionam recursos de programação às transformações XSL.
Os scripts podem ser incorporados na folha de estilos usando o
msxsl:script
elemento extension.
Objetos de extensão
Objetos de extensão são adicionados usando o AddExtensionObject método. O conjunto de permissões FullTrust é necessário para suportar objetos de extensão. Isso garante que a elevação de permissões não aconteça quando o código objeto de extensão é executado. A tentativa de chamar o AddExtensionObject método sem permissões FullTrust resulta em uma exceção de segurança sendo lançada.
Scripts de folha de estilo
Os scripts podem ser incorporados em uma folha de estilos usando o msxsl:script
elemento extension. O suporte a scripts é um recurso opcional na classe que está desabilitado XslCompiledTransform por padrão. O script pode ser habilitado definindo a XsltSettings.EnableScript propriedade e true
passando o XsltSettings objeto para o Load método.
Nota
Os blocos de script são suportados apenas no .NET Framework. Eles não são suportados no .NET Core ou .NET 5 ou posterior.
Diretrizes
Habilite o script somente quando a folha de estilos vier de uma fonte confiável. Se você não puder verificar a origem da folha de estilos ou se a folha de estilos não vier de uma fonte confiável, passe null
para o argumento de configurações XSLT.
External Resources
A linguagem XSLT tem recursos como xsl:import
, xsl:include
, ou a document()
função, onde o processador precisa resolver referências de URI. A XmlResolver classe é usada para resolver recursos externos. Os recursos externos podem ter de ser resolvidos nos dois casos seguintes:
Ao compilar uma folha de estilos, o XmlResolver é usado para
xsl:import
exsl:include
resolução.Ao executar a transformação, o XmlResolver é usado para resolver a
document()
função.Nota
A
document()
função é desabilitada por padrão na XslCompiledTransform classe. Esse recurso pode ser habilitado definindo a XsltSettings.EnableDocumentFunction propriedade etrue
passando o XsltSettings objeto para o Load método.
Os Load e Transform métodos incluem sobrecargas que aceitam um XmlResolver como um de seus argumentos. Se um XmlResolver não for especificado, um padrão XmlUrlResolver sem credenciais será usado.
Diretrizes
Habilite a document()
função somente quando a folha de estilos vier de uma fonte confiável.
A lista a seguir descreve quando você pode querer especificar um XmlResolver objeto:
Se o processo XSLT precisar acessar um recurso de rede que exija autenticação, você poderá usar um XmlResolver com as credenciais necessárias.
Se você quiser restringir os recursos que o processo XSLT pode acessar, você pode usar um XmlSecureResolver com o conjunto de permissões correto. Use a XmlSecureResolver classe se precisar abrir um recurso que você não controla ou que não é confiável.
Se quiser personalizar o comportamento, você pode implementar sua própria XmlResolver classe e usá-la para resolver recursos.
Se quiser garantir que nenhum recurso externo seja acessado, especifique
null
o XmlResolver argumento.