CA5374: Não use XslTransform
Property | valor |
---|---|
ID da regra | CA5374 |
Título | Não utilize XslTransform |
Categoria | Segurança |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 8 | Não |
Motivo
Instanciar um System.Xml.Xsl.XslTransform, que não restringe referências externas potencialmente perigosas nem impede scripts.
Descrição da regra
XslTransform é vulnerável ao operar com entradas não confiáveis. Um ataque pode executar código arbitrário.
Como corrigir violações
Substituir XslTransform por System.Xml.Xsl.XslCompiledTransform. Para obter mais orientações, consulte Migrando da classe XslTransform.
Quando suprimir avisos
O XslTransform objeto, as folhas de estilo XSLT e os dados de origem XML são todos de fontes confiáveis.
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 CA5374
// The code that's violating the rule is on this line.
#pragma warning restore CA5374
Para desabilitar a regra de um arquivo, pasta ou projeto, defina sua gravidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA5374.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.
Exemplos de pseudocódigo
Violação
No momento, o exemplo de pseudocódigo a seguir ilustra o padrão detetado por essa regra.
using System;
using System.Xml;
using System.Xml.XPath;
using System.Xml.Xsl;
namespace TestForXslTransform
{
class Program
{
static void Main(string[] args)
{
// Create a new XslTransform object.
XslTransform xslt = new XslTransform();
// Load the stylesheet.
xslt.Load("https://server/favorite.xsl");
// Create a new XPathDocument and load the XML data to be transformed.
XPathDocument mydata = new XPathDocument("inputdata.xml");
// Create an XmlTextWriter which outputs to the console.
XmlWriter writer = new XmlTextWriter(Console.Out);
// Transform the data and send the output to the console.
xslt.Transform(mydata, null, writer, null);
}
}
}
Solução
using System.Xml;
using System.Xml.Xsl;
namespace TestForXslTransform
{
class Program
{
static void Main(string[] args)
{
// Default XsltSettings constructor disables the XSLT document() function
// and embedded script blocks.
XsltSettings settings = new XsltSettings();
// Execute the transform.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load("https://server/favorite.xsl", settings, new XmlUrlResolver());
xslt.Transform("inputdata.xml", "outputdata.html");
}
}
}