Compartir a través de


CA2111: Los punteros no deberían estar visibles

Nombre de tipo

PointersShouldNotBeVisible

Identificador de comprobación

CA2111

Categoría

Microsoft.Security

Cambio problemático

Causa

Un System.IntPtr público o protegido o el campo System.UIntPtr no son de sólo lectura.

Descripción de la regla

IntPtr y UIntPtr son tipos de punteros que se utilizan para tener acceso a la memoria no administrada. Si un puntero no es privado, interno o de sólo lectura, el código malintencionado puede cambiar el valor del puntero, permitiendo de forma potencial el acceso a ubicaciones arbitrarias o provocando errores de sistema o de aplicación.

Si desea obtener acceso de forma segura al tipo que contiene el campo de puntero, vea CA2112: Los tipos seguros no deberían exponer campos.

Cómo corregir infracciones

Proteja el puntero marcándolo como de sólo lectura, interno o privado.

Cuándo suprimir advertencias

Suprima una advertencia de esta regla si no confía en el valor del puntero.

Ejemplo

El código siguiente muestra punteros que infringen y cumplen la regla. Observe que los punteros no privados también infringen la regla CA1051: No declarar campos de instancia 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;
   }
}

Reglas relacionadas

CA2112: Los tipos seguros no deberían exponer campos

CA1051: No declarar campos de instancia visibles

Vea también

Referencia

System.IntPtr

System.UIntPtr