CA5369 : Utiliser XmlReader pour la désérialisation
Propriété | Value |
---|---|
Identificateur de la règle | CA5369 |
Titre | Utiliser XmlReader pour la désérialisation |
Catégorie | Sécurité |
Le correctif est cassant ou non cassant | Sans rupture |
Activé par défaut dans .NET 8 | Non |
Cause
La désérialisation d’une entrée XML non approuvée avec un XmlSerializer.Deserialize instancié sans objet XmlReader
peut entraîner un déni de service, la divulgation d’informations et des attaques de falsification de requêtes côté serveur. Ces attaques sont activées par le traitement de schéma DTD et XML non approuvé, ce qui permet d’inclure des bombes XML et des entités externes malveillantes dans le code XML. Seul XmlReader
permet de désactiver DTD. Le traitement du schéma XML inline comme XmlReader
a la propriété ProhibitDtd
et ProcessInlineSchema
définie sur false
par défaut dans .NET Framework version 4.0 et ultérieures. Les autres options, telles que Stream
, TextReader
et XmlSerializationReader
, ne peuvent pas désactiver le traitement DTD.
Description de la règle
Le traitement de schémas DTD et XML non approuvés peut permettre le chargement de références externes dangereuses, qui doivent être restreintes à l’aide d’un XmlReader
avec un programme de résolution sécurisé ou avec le traitement de schéma inclus DTD et XML désactivé. Cette règle détecte le code qui utilise la classe XmlSerializer.Deserialize et ne prend pas XmlReader
comme paramètre de constructeur.
Comment corriger les violations
N’utilisez pas de surcharges XmlSerializer.Deserialize autres que Deserialize(XmlReader), Deserialize(XmlReader, String), Deserialize(XmlReader, XmlDeserializationEvents) ou Deserialize(XmlReader, String, XmlDeserializationEvents).
Quand supprimer les avertissements
Vous pouvez potentiellement supprimer cet avertissement si le code XML analysé provient d’une source approuvée et ne peut donc pas être falsifié.
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 CA5369
// The code that's violating the rule is on this line.
#pragma warning restore CA5369
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.CA5369.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 premier paramètre de XmlSerializer.Deserialize n’est pas XmlReader
ou une classe dérivée de celui-ci.
using System.IO;
using System.Xml.Serialization;
...
new XmlSerializer(typeof(TestClass).Deserialize(new FileStream("filename", FileMode.Open));
Solution
using System.IO;
using System.Xml;
using System.Xml.Serialization;
...
new XmlSerializer(typeof(TestClass)).Deserialize(XmlReader.Create (new FileStream("filename", FileMode.Open)));