CA2111: 포인터는 노출되면 안 됩니다.
TypeName |
PointersShouldNotBeVisible |
CheckId |
CA2111 |
범주 |
Microsoft.Security |
변경 수준 |
주요 변경 |
원인
public 또는 protected 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: 표시되는 인스턴스 필드를 선언하지 마십시오.