Share via


CA2111: I puntatori non devono essere visibili

Articolo Valore
ID regola CA2111
Category Microsoft.Security
Modifica Interruzione

Causa

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

Nota

Questa regola è stata deprecata. Per altre informazioni, vedere Regole deprecate.

Descrizione regola

IntPtr e UIntPtr sono tipi di puntatore usati per accedere alla memoria non gestita. Se un puntatore non è privato, interno o di sola lettura, il codice dannoso può modificare il valore del puntatore, consentendo potenzialmente l'accesso a posizioni arbitrarie in memoria o causando errori dell'applicazione o del 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 rendendolo di sola lettura, interno o privato.

Quando eliminare gli avvisi

Eliminare un avviso da questa regola se non si fa affidamento sul valore del puntatore.

Esempio

Il codice seguente mostra i puntatori che violano e soddisfano la regola. Si noti che anche i puntatori non privati violano 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;
   }
}

CA2112: I tipi protetti non devono esporre campi

CA1051: Non dichiarare campi di istanza visibili

Vedi anche