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


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

Товар Значение
Идентификатор правила CA2111
Категория Microsoft.Security
Критическое изменение Критическое

Причина

Общедоступное или защищенное System.IntPtrSystem.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: не объявляйте видимые поля экземпляров

См. также