Partilhar via


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

Consulte também

Referência

System.IntPtr

System.UIntPtr