CA2111 : Les pointeurs ne doivent pas être visibles
TypeName |
PointersShouldNotBeVisible |
CheckId |
CA2111 |
Catégorie |
Microsoft.Security |
Modification avec rupture |
Oui |
Cause
Un champ System.IntPtr ou System.UIntPtr public ou protégé n'est pas en lecture seule.
Description de la règle
IntPtr et UIntPtr sont des types pointeur utilisés pour accéder à une mémoire non managée. Si un pointeur n'est pas privé, interne ou en lecture seule, un code malveillant peut modifier la valeur du pointeur, autorisant potentiellement l'accès aux emplacements arbitraires en mémoire ou provoquant des défaillances des applications ou du système.
Si vous projetez de sécuriser l'accès au type qui contient le champ de pointeur, consultez CA2112 : Les types sécurisés ne doivent pas exposer de champs.
Comment corriger les violations
Sécurisez le pointeur en le rendant interne, privé ou en lecture seule.
Quand supprimer les avertissements
Supprimez un avertissement de cette règle si votre design ne repose pas sur la valeur du pointeur.
Exemple
Le code suivant présente des pointeurs qui violent et satisfont la règle. Notez que les pointeurs non privés violent également la règle CA1051 : Ne pas déclarer de champs d'instances visibles.
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;
}
}
Règles connexes
CA2112 : Les types sécurisés ne doivent pas exposer de champs
CA1051 : Ne pas déclarer de champs d'instances visibles