Partilhar via


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:

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.

Consulte também