Partager via


CA3076 : Exécution non sécurisée de script XSLT

Propriété Value
Identificateur de la règle CA3076
Titre Exécution non sécurisée de script XSLT
Catégorie Sécurité
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 10 Non

Cause

Si vous exécutez des transformations XSLT (Extensible Stylesheets Language Transformations) dans des applications .NET de manière non sécurisée, le processeur peut résoudre des références d’URI non approuvées qui pourraient divulguer des informations sensibles aux attaquants, ce qui entraîne un déni de service et des attaques intersite. Pour plus d’informations, consultez les considérations relatives à la sécurité XSLT (Guide .NET).

Description de la règle

XSLT est une norme W3C (World Wide Web Consortium) pour la transformation des données XML. XSLT est généralement utilisé pour écrire des feuilles de style pour transformer des données XML sous d’autres formats tels que HTML, un texte de longueur fixe, un texte délimité par des virgules ou un autre format XML. Bien qu’il soit interdit par défaut, vous pouvez choisir de l’activer pour votre projet.

Pour garantir que vous ne vous exposez pas aux attaques, cette règle se déclenche chaque fois que XslCompiledTransform.Load reçoit des instances de combinaisons non sécurisées de XsltSettings et XmlResolver, ce qui permet le traitement de scripts malveillants.

Comment corriger les violations

  • Remplacez l’argument XsltSettings non sécurisé XsltSettings.Default par ou par une instance qui a désactivé la fonction de document et l’exécution de script.
  • Remplacez l’argument XmlResolver par la valeur null ou une instance de XmlSecureResolver .

Quand supprimer les avertissements

Sauf si vous êtes sûr que l’entrée provient d’une source fiable, ne supprimez aucune règle de cet avertissement.

Supprimer un avertissement

Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.

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

Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none dans le fichier de configuration.

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

Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.

Exemples de pseudo-code

Violation qui utilise 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
        }
    }
}

Solution qui utilise 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);
        }
    }
}

Violation : la fonction de document et l’exécution de script ne sont pas désactivées

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

Solution : désactiver la fonction de document et l’exécution de script

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

Note

À compter de .NET 10, la EnableScript propriété est marquée comme obsolète et génère un avertissement SYSLIB0062. Sur .NET (Core), il n’est plus nécessaire de définir explicitement cette propriété false , car l’exécution du script n’est pas prise en charge.

Voir aussi