CA2111:指针应为不可见

类型名

PointersShouldNotBeVisible

CheckId

CA2111

类别

Microsoft.Security

是否重大更改

原因

公共或受保护的 System.IntPtrSystem.UIntPtr 字段不是只读的。

规则说明

IntPtrUIntPtr 是用于访问非托管内存的指针类型。 如果指针不是私有、内部或只读的,则恶意代码可以更改指针的值,这样,便有可能允许访问内存中的任意位置或导致应用程序或系统失败。

如果希望保护对包含指针字段的类型的访问,请参见 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