CA5367 : Ne sérialisez pas les types avec des champs de pointeur
Propriété | Value |
---|---|
Identificateur de la règle | CA5367 |
Titre | Ne pas sérialiser les types avec des champs de pointeur |
Catégorie | Sécurité |
Le correctif est cassant ou non cassant | Sans rupture |
Activé par défaut dans .NET 8 | Non |
Cause
Les pointeurs ne sont pas de type sécurisé, ce qui signifie que vous ne pouvez pas garantir l’exactitude de la mémoire vers laquelle ils pointent. Ainsi, la sérialisation de types avec des champs de pointeur est un risque pour la sécurité, car elle peut permettre à un attaquant de contrôler le pointeur.
Description de la règle
Cette règle vérifie s’il existe une classe sérialisable avec un champ ou une propriété de pointeur. Les membres qui ne peuvent pas être sérialisés peuvent être un pointeur, comme des membres static ou des champs marqués avec System.NonSerializedAttribute.
Comment corriger les violations
N’utilisez pas de types de pointeurs pour les membres d’une classe sérialisable, ou ne sérialisez pas les membres qui sont des pointeurs.
Quand supprimer les avertissements
Ne prenez pas le risque d’utiliser des pointeurs dans des types sérialisables.
Exemples de pseudo-code
Violation
using System;
[Serializable()]
unsafe class TestClassA
{
private int* pointer;
}
Solution 1
using System;
[Serializable()]
unsafe class TestClassA
{
private int i;
}
Solution 2
using System;
[Serializable()]
unsafe class TestClassA
{
private static int* pointer;
}