Condividi tramite


CA2111: I puntatori non devono essere visibili

TypeName

PointersShouldNotBeVisible

CheckId

CA2111

Category

Microsoft.Security

Breaking Change

Breaking

Causa

Un campo pubblico o protetto System.IntPtr o System.UIntPtr non è in sola lettura.

Descrizione della regola

IntPtr e UIntPtr sono tipi di puntatore utilizzati per accedere alla memoria non gestita. Se un puntatore non è privato, interno o in sola lettura, è possibile che codice dannoso ne modifichi il valore, consentendo potenzialmente l'accesso a percorsi arbitrari nella memoria o causando errori dell'applicazione o di sistema.

Se si intende proteggere l'accesso al tipo che contiene il campo del puntatore, vedere CA2112: I tipi protetti non devono esporre campi.

Come correggere le violazioni

Proteggere il puntatore contrassegnandolo come in sola lettura, interno o privato.

Esclusione di avvisi

Escludere un avviso da questa regola se non ci si basa sul valore del puntatore.

Esempio

Nel codice riportato di seguito vengono illustrati puntatori che violano e soddisfano la regola. Si noti che i puntatori non privati violano anche la regola CA1051: Non dichiarare campi di istanza visibili.

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;
   }
}

Regole correlate

CA2112: I tipi protetti non devono esporre campi

CA1051: Non dichiarare campi di istanza visibili

Vedere anche

Riferimenti

System.IntPtr

System.UIntPtr