CA2111 : Les pointeurs ne doivent pas être visiblesCA2111: Pointers should not be visible

TypeNameTypeName PointersShouldNotBeVisiblePointersShouldNotBeVisible
CheckIdCheckId CA2111CA2111
CategoryCategory Microsoft.SecurityMicrosoft.Security
Modification avec ruptureBreaking Change RuptureBreaking

CauseCause

Un public ou protégé System.IntPtr ou System.UIntPtr champ n’est pas en lecture seule.A public or protected System.IntPtr or System.UIntPtr field is not read-only.

Description de la règleRule description

IntPtr et UIntPtr sont des types de pointeur qui servent à accéder à la mémoire non managée.IntPtr and UIntPtr are pointer types that are used to access unmanaged memory. Si un pointeur n’est pas privée, interne ou en lecture seule, un code malveillant peut modifier la valeur du pointeur, potentiellement autorisant l’accès aux emplacements arbitraires en mémoire ou provoquant des défaillances des applications ou du système.If a pointer is not private, internal, or read-only, malicious code can change the value of the pointer, potentially allowing access to arbitrary locations in memory or causing application or system failures.

Si vous avez l’intention pour 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.If you intend to secure access to the type that contains the pointer field, see CA2112: Secured types should not expose fields.

Comment corriger les violationsHow to fix violations

Sécurisez le pointeur en le rendant en lecture seule, interne ou privé.Secure the pointer by making it read-only, internal, or private.

Quand supprimer les avertissementsWhen to suppress warnings

Supprimez un avertissement de cette règle si vous ne comptez pas sur la valeur du pointeur.Suppress a warning from this rule if you do not rely on the value of the pointer.

ExempleExample

Le code suivant montre des pointeurs qui violent et satisfaire à la règle.The following code shows pointers that violate and satisfy the rule. Notez que les pointeurs non privés violent également la règle CA1051 : ne déclarez pas de champs d’instances visibles.Notice that the non-private pointers also violate the rule CA1051: Do not declare visible instance fields.

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 champsCA2112: Secured types should not expose fields

CA1051 : Ne déclarez pas de champs d’instances visiblesCA1051: Do not declare visible instance fields

Voir aussiSee also