Compartilhar via


CA2111: os ponteiros não devem estar visíveis

TypeName

PointersShouldNotBeVisible

CheckId

CA2111

Categoria

Microsoft.Security

Alteração Significativa

Quebra

Causa

Um público ou IntPtr protegido ou um campo de UIntPtr não são somente leitura.

Descrição da Regra

IntPtr e UIntPtr do ponteiro são os tipos que são usados para acessar a memória não gerenciado.Se um ponteiro não será privado, interno, ou somente leitura, o código mal-intencionado pode alterar o valor do ponteiro, potencialmente permitindo o acesso aos locais arbitrários na memória ou fazendo com que o aplicativo ou falhas do sistema.

Se você pretende proteger o acesso ao tipo que contém o campo do ponteiro, consulte CA2112: os tipos seguros não devem expor campos.

Como Corrigir Violações

Proteger o ponteiro fazendo o somente leitura, interno, ou particular.

Quando Suprimir Alertas

Suprima um aviso dessa regra se você não depende do valor do ponteiro.

Exemplo

O código a seguir mostra os ponteiros que violam e satisfazem a regra.Observe que os ponteiros não existe também violam a regra CA1051: não declarar campos de instância visíveis.

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

CA2112: os tipos seguros não devem expor campos

CA1051: não declarar campos de instância visíveis

Consulte também

Referência

IntPtr

UIntPtr