CA2111 : Les pointeurs ne doivent pas être visibles

Élément Valeur
ID de la règle CA2111
Category Microsoft.Security
Modification avec rupture Rupture

Cause

Un champ System.IntPtr ou System.UIntPtr public ou protégé n’est pas en lecture seule.

Notes

Cette règle est déconseillée. Pour plus d’informations, consultez Règles dépréciées.

Description de la règle

IntPtr et UIntPtr sont des types de pointeurs utilisés pour accéder à la mémoire non managée. Si un pointeur n’est pas privé, interne ou en lecture seule, un code malveillant peut modifier la valeur du pointeur, autorisant potentiellement l’accès aux emplacements arbitraires en mémoire ou provoquant des défaillances des applications ou du système.

Si vous envisagez de sécuriser l’accès au type qui contient le champ pointeur, consultez CA2112 : Les types sécurisés ne doivent pas exposer de champs.

Comment corriger les violations

Sécurisez le pointeur en faisant en sorte qu’il soit en lecture seule, interne ou privé.

Quand supprimer les avertissements

Supprimez un avertissement de cette règle si vous ne vous fiez pas à la valeur du pointeur.

Exemple

Le code suivant montre des pointeurs qui enfreignent et satisfont à la règle. Notez que les pointeurs non privés violent également la règle CA1051 : Ne pas déclarer de champs d’instance visibles.

using System;

namespace SecurityRulesLibrary
{

   public class ExposedPointers
   {
      // Violates rule: PointersShouldNotBeVisible.
      public IntPtr publicPointer1;
      public UIntPtr publicPointer2;
      protected IntPtr protectedPointer;

      // Satisfies the rule.
      internal UIntPtr internalPointer;
      private UIntPtr privatePointer;

      public readonly UIntPtr publicReadOnlyPointer;
      protected readonly IntPtr protectedReadOnlyPointer;
   }
}

CA2112 : Les types sécurisés ne doivent pas exposer de champs

CA1051 : Ne pas déclarer de champs d'instances visibles

Voir aussi