CA2111:指针应为不可见
类型名 |
PointersShouldNotBeVisible |
CheckId |
CA2111 |
类别 |
Microsoft.Security |
是否重大更改 |
是 |
原因
公共或受保护的 IntPtr 或 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;
}
}