Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
| Propriété | Valeur |
|---|---|
| Identificateur de la règle | CA2354 |
| Titre | Un jeu de données ou une table de données non sécurisé(e) dans un graphe d’objets désérialisé peut être vulnérable à une attaque par exécution de code à distance |
| Catégorie | Sécurité |
| Le correctif a un effet disruptif ou non disruptif | Sans rupture |
| Activé par défaut dans .NET 10 | Non |
| Langues applicables | C# et Visual Basic |
Cause
La désérialisation avec un System.Runtime.Serialization.IFormatter sérialisé permet au graphe d’objet du type converti d’inclure un DataSet ou un DataTable.
Cette règle utilise une approche différente d’une règle similaire, CA2352 : Un DataSet ou DataTable non sécurisé dans un type sérialisable peut être vulnérable à l’exécution de code à distance.
Description de la règle
Lors de la désérialisation d'une entrée non approuvée avec BinaryFormatter, si le graphe d'objets désérialisé contient un DataSet ou un DataTable, un attaquant peut créer une charge utile malveillante pour effectuer une attaque d'exécution de code à distance.
Pour plus d’informations, consultez les conseils de sécurité DataSet et DataTable.
Comment corriger les violations
- Si possible, utilisez Entity Framework plutôt que DataSet et DataTable.
- Rendez les données sérialisées inviolables. Après la sérialisation, signez par chiffrement les données sérialisées. Avant la désérialisation, validez la signature de chiffrement. Protégez la clé de chiffrement contre la divulgation, et concevez un mécanisme de permutation des clés.
Quand supprimer les avertissements
Vous pouvez supprimer sans risque un avertissement de cette règle si :
- Vous savez que l’entrée est fiable. Considérez que la limite d’approbation et les flux de données de votre application peuvent changer au fil du temps.
- Vous avez pris l’une des précautions décrites dans Comment corriger les violations.
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 CA2354
// The code that's violating the rule is on this line.
#pragma warning restore CA2354
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.CA2354.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.
Exemples de pseudo-code
Infraction
using System.Data;
using System.IO;
using System.Runtime.Serialization;
[Serializable]
public class MyClass
{
public MyOtherClass OtherClass { get; set; }
}
[Serializable]
public class MyOtherClass
{
private DataSet myDataSet;
}
public class ExampleClass
{
public MyClass Deserialize(Stream stream)
{
BinaryFormatter bf = new BinaryFormatter();
return (MyClass) bf.Deserialize(stream);
}
}
Règles associées
CA2350 : Vérifier que l’entrée de DataTable.ReadXml() est approuvée
CA2351 : Vérifier que l’entrée de DataSet.ReadXml() est approuvée
CA2353 : jeu de données ou table de données non sécurisé(e) dans un type sérialisable
CA2355 : Jeu de données ou table de données non sécurisé(e) dans un graphe d’objets désérialisé
CA2356 : jeu de données ou table de données non sécurisé(e) dans un graphe d’objets désérialisé web