Share via


CA5374: XslTransform niet gebruiken

Eigenschappen Weergegeven als
Regel-id CA5374
Titel XslTransform niet gebruiken
Categorie Beveiliging
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 9 Nee

Oorzaak

Instantiëren van een System.Xml.Xsl.XslTransform, waardoor mogelijk gevaarlijke externe verwijzingen niet worden beperkt of scripts worden voorkomen.

Beschrijving van regel

XslTransform is kwetsbaar wanneer u niet-vertrouwde invoer gebruikt. Een aanval kan willekeurige code uitvoeren.

Schendingen oplossen

Vervang XslTransform door System.Xml.Xsl.XslCompiledTransform. Zie Migreren vanuit de XslTransform-klasse voor meer informatie.

Wanneer waarschuwingen onderdrukken

De XslTransform object-, XSLT-opmaakmodellen en XML-brongegevens zijn allemaal afkomstig van vertrouwde bronnen.

Een waarschuwing onderdrukken

Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.

#pragma warning disable CA5374
// The code that's violating the rule is on this line.
#pragma warning restore CA5374

Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none ervan in op het configuratiebestand.

[*.{cs,vb}]
dotnet_diagnostic.CA5374.severity = none

Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.

Voorbeelden van pseudocode

Schending

Op dit moment illustreert het volgende pseudocodevoorbeeld het patroon dat door deze regel is gedetecteerd.

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

Oplossing

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