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 |
Sí |
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