CA3061 : Ne pas ajouter de schéma par URL
Propriété | Value |
---|---|
Identificateur de la règle | CA3061 |
Titre | Ne pas ajouter de schéma par URL |
Catégorie | Sécurité |
Le correctif est cassant ou non cassant | Sans rupture |
Activée par défaut dans .NET 9 | Non |
Cause
La surcharge de XmlSchemaCollection.Add(String, String)
utilise XmlUrlResolver
pour spécifier un schéma XML externe sous la forme d’un URI. Si la chaîne d’URI est contaminée, cela peut entraîner l’analyse d’un schéma XML malveillant, ce qui permet l’inclusion de bombes XML et d’entités externes malveillantes. Cela peut permettre à un attaquant malveillant d’effectuer un déni de service, de divulguer des informations ou d’attaquer en falsifiant une requête côté serveur.
Description de la règle
N’utilisez pas la surcharge non sécurisée de la méthode Add
, car elle peut entraîner des références externes dangereuses.
Comment corriger les violations
- N’utilisez pas
XmlSchemaCollection.Add(String, String)
.
Quand supprimer les avertissements
Supprimez cette règle si vous êtes sûr que votre code XML ne résout pas les références externes dangereuses.
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 CA3061
// The code that's violating the rule is on this line.
#pragma warning restore CA3061
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.CA3061.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.
Exemples de pseudo-code
Violation
L’échantillon de pseudo-code suivant illustre le modèle détecté par cette règle.
Le type du deuxième paramètre est string
.
using System;
using System.Xml.Schema;
...
XmlSchemaCollection xsc = new XmlSchemaCollection();
xsc.Add("urn: bookstore - schema", "books.xsd");
Solution
using System;
using System.IO;
using System.Xml;
using System.Xml.Schema;
...
XmlSchemaCollection xsc = new XmlSchemaCollection();
xsc.Add("urn: bookstore - schema", new XmlTextReader(new FileStream(""xmlFilename"", FileMode.Open)));