Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de changer d’annuaire.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer d’annuaire.
| 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
XsltSettingsnon 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.