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