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