Ponteiros devem estar visíveis
TypeName |
PointersShouldNotBeVisible |
CheckId |
CA2111 |
Category (Categoria) |
Microsoft.segurança |
Quebrando alterar |
Quebrando |
Causa
Um público ou protegido System.IntPtr ou System.UIntPtr campo não é somente leitura.
Descrição da regra
IntPtr e UIntPtr são tipos de ponteiro são usados para acessar a memória não gerenciada. Se um ponteiro não é particular, interno ou somente leitura, código malicioso pode alterar o valor do ponteiro, potencialmente permitindo o acesso aos locais arbitrários na memória ou causando falhas de aplicativo ou sistema.
Se você pretende proteger o acesso para o tipo que contém o campo de ponteiro, consulte Tipos protegidos não devem expor campos.
Como corrigir violações
Proteger o ponteiro, tornando-o somente leitura e internos, ou particular.
Quando suprimir avisos
Elimina um aviso essa regra se você não confie no valor do ponteiro.
Exemplo
O código a seguir mostra os ponteiros que violam e satisfazem a regra.Observe que os ponteiros não-particulares também violam a regra Não declarará campos de instância visível.
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;
}
}
Regras relacionadas
Tipos protegidos não devem expor campos
Não declarará campos de instância visível