Partager via


CA2111 : Les pointeurs ne doivent pas être visibles

TypeName

PointersShouldNotBeVisible

CheckId

CA2111

Catégorie

Microsoft.Security

Modification avec rupture

Oui

Cause

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

Description de la règle

IntPtr et UIntPtr sont des types pointeur utilisés pour accéder à une 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 projetez de sécuriser l'accès au type qui contient le champ de pointeur, consultez CA2112 : Les types sécurisés ne doivent pas exposer de champs.

Comment corriger les violations

Sécurisez le pointeur en le rendant interne, privé ou en lecture seule.

Quand supprimer les avertissements

Supprimez un avertissement de cette règle si votre design ne repose pas sur la valeur du pointeur.

Exemple

Le code suivant présente des pointeurs qui violent 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'instances 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;
   }
}

Règles connexes

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

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

Voir aussi

Référence

System.IntPtr

System.UIntPtr