Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
| Property | Valor |
|---|---|
| ID da regra | CA3076 |
| Título | Execução de script XSLT não seguro |
| Categoria | Segurança |
| Correção interruptiva ou sem interrupção | Sem interrupção |
| Habilitado por padrão no .NET 10 | Não |
Causa
Se você executar Extensible Stylesheets Language Transformations (XSLT) em aplicativos .NET sem segurança, o processador poderá resolver referências de URI não confiáveis que podem divulgar informações confidenciais para invasores, levando à negação de serviço e ataques entre sites. Para obter mais informações, consulte Considerações de segurança XSLT (Guia do .NET).
Descrição da regra
O XSLT é um padrão W3C (World Wide Web Consortium) para transformar dados XML. O XSLT normalmente é usado para gravar folhas de estilo para transformar dados XML em outros formatos, como HTML, texto de comprimento fixo, texto separado por vírgula ou um formato XML diferente. Embora seja proibido por padrão, você pode optar por habilitá-lo para seu projeto.
Para garantir que você não esteja expondo uma superfície de ataque, essa regra é disparada sempre que o XslCompiledTransform.Load recebe instâncias de combinação inseguras de XsltSettings e XmlResolver, o que permite o processamento de script mal-intencionado.
Como corrigir violações
- Substitua o argumento inseguro
XsltSettingspor XsltSettings.Default ou por uma instância que desabilitou a função de documento e a execução do script. - Substitua o argumento XmlResolver por nulo ou uma instância XmlSecureResolver.
Quando suprimir avisos
A menos que você tenha certeza de que se sabe que a entrada vem de uma fonte confiável, não suprima uma regra desse aviso.
Suprimir um aviso
Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar a regra.
#pragma warning disable CA3076
// The code that's violating the rule is on this line.
#pragma warning restore CA3076
Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA3076.severity = none
Para obter mais informações, confira Como suprimir avisos de análise de código.
Exemplos de pseudocódigo
Violação que usa XsltSettings.TrustedXslt
using System.Xml;
using System.Xml.Xsl;
namespace TestNamespace
{
class TestClass
{
void TestMethod()
{
XslCompiledTransform xslCompiledTransform = new XslCompiledTransform();
var settings = XsltSettings.TrustedXslt;
var resolver = new XmlUrlResolver();
xslCompiledTransform.Load("testStylesheet", settings, resolver); // warn
}
}
}
Solução que usa XsltSettings.Default
using System.Xml;
using System.Xml.Xsl;
namespace TestNamespace
{
class TestClass
{
void TestMethod()
{
XslCompiledTransform xslCompiledTransform = new XslCompiledTransform();
var settings = XsltSettings.Default;
var resolver = new XmlUrlResolver();
xslCompiledTransform.Load("testStylesheet", settings, resolver);
}
}
}
Violação – a função de documento e a execução do script não estão desabilitadas
using System.Xml;
using System.Xml.Xsl;
namespace TestNamespace
{
class TestClass
{
private static void TestMethod(XsltSettings settings)
{
try
{
XslCompiledTransform xslCompiledTransform = new XslCompiledTransform();
var resolver = new XmlUrlResolver();
xslCompiledTransform.Load("testStylesheet", settings, resolver); // warn
}
catch { throw; }
finally { }
}
}
}
Solução – desabilitar a função de documento e a execução de script
using System.Xml;
using System.Xml.Xsl;
namespace TestNamespace
{
class TestClass
{
private static void TestMethod(XsltSettings settings)
{
try
{
XslCompiledTransform xslCompiledTransform = new XslCompiledTransform();
settings.EnableDocumentFunction = false;
settings.EnableScript = false;
var resolver = new XmlUrlResolver();
xslCompiledTransform.Load("testStylesheet", settings, resolver);
}
catch { throw; }
finally { }
}
}
}
Observação
A partir do .NET 10, a EnableScript propriedade é marcada como obsoleta e gera aviso SYSLIB0062. No .NET (Core), não é mais necessário definir explicitamente essa propriedade, pois não há suporte para a false execução de script.