CA5367 : Ne sérialisez pas les types avec des champs de pointeur

Propriété Valeur
Identificateur de la règle CA5367
Titre Ne pas sérialiser les types avec des champs de pointeur
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

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 des pointeurs, comme des membres statiques 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

Infraction

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;
}