共用方式為


CA2111:指標不應該為可見的

型別名稱

PointersShouldNotBeVisible

CheckId

CA2111

分類

Microsoft.Security

中斷變更

中斷

原因

公用或保護的 System.IntPtrSystem.UIntPtr 欄位都不是唯讀的。

規則描述

IntPtrUIntPtr 是用於存取 Unmanaged 記憶體的指標型別。如果指標不是私用、內部或唯讀的,惡意的程式碼可變更指標值,進而可能會允許存取記憶體中的任意位置,或是造成應用程式或系統錯誤。

如果您想要保護對包含指標欄位之型別的存取,請參閱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