Compartilhar via


Considerações de segurança XSLT

O idioma XSLT tem um conjunto rico de recursos que oferecem várias energia e flexibilidade. Inclui muitos recursos que, quando úteis, podem também ser explorados por fontes fora. Para usar com segurança XSLT, você deve compreender os tipos de problemas de segurança que ocorrem ao usar XSLT, e as estratégias básicas que você pode usar para atenuar esses riscos.

Extensões XSLT

Duas extensões populares XSLT são objetos de script e a extensão de folha de estilos. Essas extensões permitem que o processador XSLT executa o código.

  • Os objetos de extensão adicionar recursos de programação as transformações XSL.

  • Os scripts podem ser inseridos na folha de estilos usando o elemento de extensão de msxsl:script .

Objetos de extensão

Os objetos de extensão são adicionados usando o método AddExtensionObject . O conjunto de permissões FullTrust é necessário para oferecer suporte objetos de extensão. Isso garante que a elevação de permissões não ocorre quando o código de objeto de extensão é executado. Tentar chamar o método de AddExtensionObject sem permissões FullTrust de resulta em uma exceção de segurança que está sendo lançada.

Scripts de folha de estilos

Os scripts podem ser inseridos em uma folha de estilos usando o elemento de extensão de msxsl:script . Suporte de script é um recurso opcional na classe de XslCompiledTransform que é desativada por padrão. O script pode ser ativado definindo a propriedade de XsltSettings.EnableScript a true e passando o objeto de XsltSettings para o método de Load .

Observação

Os blocos de script têm suporte apenas no .NET Framework. Não há suporte para eles no .NET Core ou no .NET 5 ou posterior.

Diretrizes

Habilitar scripts somente quando a folha de estilos vem de uma fonte confiável. Se você não pode verificar a fonte da folha de estilos, ou se a folha de estilos não vem de uma fonte confiável, passe em null para o argumento configurações de fonte.

Recursos externos

O idioma XSLT tem recursos como xsl:import, xsl:include, ou a função de document() , onde o processador precisa resolver referências de um URI. A classe de XmlResolver é usada para resolver recursos externos. Os recursos externos podem precisar ser resolvido nos dois seguintes casos:

Os métodos cada um de Load e de Transform incluem as sobrecargas que aceitam XmlResolver como um dos argumentos. Se XmlResolver não for especificado, XmlUrlResolver padrão sem credenciais é usado.

Diretrizes

Ativar a função de document() somente quando a folha de estilos vem de uma fonte confiável.

A lista a seguir descreve quando você pode querer especificar um objeto de XmlResolver :

  • Se o processo XSLT precisa acessar um recurso de rede que requer autenticação, você pode usar XmlResolver com as credenciais necessárias.

  • Se você deseja restringir os recursos que o processo XSLT pode acessar, você pode usar XmlSecureResolver com o conjunto de permissões correto. Use a classe de XmlSecureResolver se você precisa abrir um recurso que você não controle, ou que é não confiável.

  • Se você desejar personalizar o comportamento, você pode implementar sua própria classe de XmlResolver e usá-la para resolver recursos.

  • Se você quiser garantir que nenhum recurso externo é acessado, você pode especificar null para o argumento de XmlResolver .

Confira também