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