Partilhar via


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");
        }
    }
}