CA2111:指標不應該為可見的
型別名稱 |
PointersShouldNotBeVisible |
CheckId |
CA2111 |
分類 |
Microsoft.Security |
中斷變更 |
中斷 |
原因
公用或保護的 System.IntPtr 或 System.UIntPtr 欄位都不是唯讀的。
規則描述
IntPtr 和 UIntPtr 是用於存取 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;
}
}