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é par défaut dans .NET 8 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)));