Compartir a través de


Los punteros no deberían estar visibles

Actualización: noviembre 2007

Nombre de tipo

PointersShouldNotBeVisible

Identificador de comprobación

CA2111

Categoría

Microsoft.Security

Cambio problemático

Motivo

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 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 No declarar campos de instancias 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

Los tipos seguros no deberían exponer campos

No declarar campos de instancias visibles

Vea también

Referencia

System.IntPtr

System.UIntPtr