Поделиться через


Указатели не должны быть видимыми

Обновлен: Ноябрь 2007

TypeName

PointersShouldNotBeVisible

CheckId

CA2111

Категория

Microsoft.Security

Критическое изменение

Критическое

Причина

Открытое или защищенное поле System.IntPtr или System.UIntPtr доступно не только для чтения.

Описание правила

Поля IntPtr и UIntPtr принадлежат к типам указателей, используемых для доступа к неуправляемой памяти. Если указатель не является закрытым, внутренним или доступным только для чтения, злоумышленный код может изменить его значение, что может позволить получить доступ к произвольным областям памяти или вызвать сбой приложения или системы.

Сведения об обеспечении безопасного доступа к типу, содержащему поле указателя, см. в разделе Защищенные типы не должны предоставлять поля.

Предотвращение нарушений

Обеспечьте безопасность указателя, сделав его доступным только для чтения, внутренним или закрытым.

Отключение предупреждений

Предупреждения о нарушении этого правила можно отключить, если значение указателя не имеет большого значения.

Пример

В следующем примере показаны два указателя, один из которых нарушает данное правило, а другой удовлетворяет ему. Обратите внимание, что указатели, которые не являются закрытыми, также нарушают правило Не объявляйте видимые поля экземпляров.

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;
   }
}

Связанные правила

Защищенные типы не должны предоставлять поля

Не объявляйте видимые поля экземпляров

См. также

Ссылки

System.IntPtr

System.UIntPtr