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


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

TypeName

PointersShouldNotBeVisible

CheckId

CA2111

Категория

Microsoft.Security

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

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

Причина

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

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

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

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

Устранение нарушений

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

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

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

Пример

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

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

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

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

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

См. также

Ссылки

System.IntPtr

System.UIntPtr