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:
Ao criar uma folha de estilos, XmlResolver é usado para
xsl:import
e resolução dexsl:include
.Ao executar a transformação, XmlResolver é usado para resolver a função de
document()
.Observação
A função de
document()
é desativada por padrão na classe de XslCompiledTransform . Esse recurso pode ser ativado definindo a propriedade de XsltSettings.EnableDocumentFunction atrue
e passando o objeto de XsltSettings para o método de Load .
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 .