Megosztás a következőn keresztül:


CA3076: Nem biztonságos XSLT-szkript végrehajtása

Tulajdonság Érték
Szabályazonosító CA3076
Cím Nem biztonságos XSLT-szkript végrehajtása
Kategória Biztonság
A javítás kompatibilitástörő vagy nem törik Nem törés
Alapértelmezés szerint engedélyezve a .NET 8-ban Nem

Ok

Ha nem biztonságosan hajtja végre az Extensible Stylesheets Language Transformations (XSLT) szolgáltatást a .NET-alkalmazásokban, a processzor feloldhatja a nem megbízható URI-hivatkozásokat, amelyek bizalmas információkat tehetnek közzé a támadók számára, ami szolgáltatásmegtagadáshoz és helyek közötti támadásokhoz vezethet. További információ: XSLT biztonsági szempontok (.NET-útmutató).

Szabály leírása

Az XSLT egy World Wide Web Consortium (W3C) szabvány az XML-adatok átalakításához. Az XSLT-t általában stíluslapok írására használják, hogy az XML-adatokat más formátumokra, például HTML- vagy rögzített hosszúságú szöveggé, vesszővel tagolt szöveggé vagy más XML-formátumra alakítsa át. Bár alapértelmezés szerint tilos, dönthet úgy, hogy engedélyezi azt a projekt számára.

Annak érdekében, hogy ne tárjon fel támadási felületet, ez a szabály az XslCompiledTransform minden alkalommal aktiválódik.Load nem biztonságos kombinációs példányokat XsltSettingsXmlResolverfogad, amelyek rosszindulatú szkriptfeldolgozást tesz lehetővé.

Szabálysértések kijavítása

  • Cserélje le a nem biztonságos Xslt Gépház argumentumot az Xslt Gépház.Default vagy egy olyan példányra, amely letiltotta a dokumentumfüggvényeket és a szkriptek végrehajtását.

  • Cserélje le az XmlResolver argumentumot null értékűre vagy egy példányra XmlSecureResolver .

Mikor kell letiltani a figyelmeztetéseket?

Hacsak nem biztos abban, hogy a bemenet megbízható forrásból származik, ne tiltsa le a figyelmeztetés egyik szabályát sem.

Figyelmeztetés mellőzése

Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.

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

Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none a konfigurációs fájlban.

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

További információ: Kódelemzési figyelmeztetések letiltása.

Példák pszeudokódokra

Xslt Gépház használó szabálysértés. 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
        }
    }
}

Xslt Gépház-t használó megoldás. Alapértelmezett

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

Szabálysértés – a dokumentumfüggvény és a szkript végrehajtása nincs letiltva

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

Megoldás – a dokumentumfüggvény és a szkript végrehajtásának letiltása

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

Kapcsolódó információk