CA3076: Execução de script XSLT insegura
Property | valor |
---|---|
ID da regra | CA3076 |
Título | Execução de script XSLT insegura |
Categoria | Segurança |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 9 | Não |
Motivo
Se você executar XSLT (Extensible Stylesheets Language Transformations) em aplicativos .NET de forma insegura, o processador poderá resolver referências de URI não confiáveis que podem divulgar informações confidenciais a invasores, levando a ataques de negação de serviço e entre sites. Para obter mais informações, consulte Considerações de segurança XSLT (Guia .NET).
Descrição da regra
XSLT é um padrão W3C (World Wide Web Consortium) para transformar dados XML. XSLT é normalmente usado para escrever folhas de estilo para transformar dados XML em outros formatos, como HTML, texto de comprimento fixo, texto separado por vírgulas ou um formato XML diferente. Embora 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 será acionada sempre que o XslCompiledTransform.Load recebe instâncias de combinação inseguras de e XmlResolver, o que permite o processamento de XsltSettings scripts mal-intencionados.
Como corrigir violações
Substitua o argumento XsltSettings inseguro por XsltSettings.Default ou com uma instância que tenha desativado a função de documento e a execução de script.
Substitua o XmlResolver argumento por null ou uma XmlSecureResolver instância.
Quando suprimir avisos
A menos que você tenha certeza de que a entrada é conhecida por ser de uma fonte confiável, não suprima uma regra deste aviso.
Suprimir um aviso
Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar 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 de um arquivo, pasta ou projeto, defina sua gravidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA3076.severity = none
Para obter mais informações, consulte 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 — função de documento e execução de script não desativada
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 — desative a função de documento e a execução de scripts
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 { }
}
}
}