CA2111: Los punteros no deberían estar visibles
Nombre de tipo |
PointersShouldNotBeVisible |
Identificador de comprobación |
CA2111 |
Categoría |
Microsoft.Security |
Cambio problemático |
Sí |
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