다음을 통해 공유


CA2111: 포인터는 노출되면 안 됩니다.

TypeName

PointersShouldNotBeVisible

CheckId

CA2111

범주

Microsoft.Security

변경 수준

주요 변경

원인

public 또는 protected System.IntPtr 또는 System.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