Share via


CA3076: Onveilige XSLT-scriptuitvoering

Eigenschappen Weergegeven als
Regel-id CA3076
Titel Onveilige XSLT-scriptuitvoering
Categorie Beveiliging
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 9 Nee

Oorzaak

Als u Extensible Stylesheets Language Transformations (XSLT) in .NET-toepassingen onveilig uitvoert, kan de processor niet-vertrouwde URI-verwijzingen oplossen die gevoelige informatie kunnen vrijgeven aan aanvallers, wat leidt tot Denial of Service- en Cross-Site-aanvallen. Zie xsLT-beveiligingsoverwegingen (.NET Guide) voor meer informatie.

Beschrijving van regel

XSLT is een W3C-standaard (World Wide Web Consortium) voor het transformeren van XML-gegevens. XSLT wordt meestal gebruikt om opmaakmodellen te schrijven om XML-gegevens te transformeren naar andere indelingen, zoals HTML, tekst met vaste lengte, door komma's gescheiden tekst of een andere XML-indeling. Hoewel dit standaard verboden is, kunt u ervoor kiezen om dit in te schakelen voor uw project.

Om ervoor te zorgen dat u geen kwetsbaarheid voor aanvallen weergeeft, wordt deze regel geactiveerd wanneer de XslCompiledTransform.Load ontvangt onveilige combinatie-exemplaren van XsltSettings en XmlResolver, waardoor schadelijke scriptverwerking mogelijk is.

Schendingen oplossen

  • Vervang het onveilige argument XsltSettings door XsltSettings.Default of met een exemplaar dat de documentfunctie en scriptuitvoering heeft uitgeschakeld.

  • Vervang het XmlResolver argument door null of een XmlSecureResolver exemplaar.

Wanneer waarschuwingen onderdrukken

Tenzij u zeker weet dat de invoer afkomstig is van een vertrouwde bron, moet u geen regel van deze waarschuwing onderdrukken.

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 CA3076
// The code that's violating the rule is on this line.
#pragma warning restore CA3076

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.CA3076.severity = none

Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.

Voorbeelden van pseudocode

Schending die gebruikmaakt van 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
        }
    }
}

Oplossing die gebruikmaakt van 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);
        }
    }
}

Schending: documentfunctie en scriptuitvoering niet uitgeschakeld

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 { }
        }
    }
}

Oplossing: documentfunctie en scriptuitvoering uitschakelen

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 { }
        }
    }
}

Zie ook