Udostępnij za pośrednictwem


CA2111: Wskaźniki nie powinny być widoczne

Pozycja Wartość
Ruleid CA2111
Kategoria Microsoft.Security
Zmiana powodująca niezgodność Kluczowa

Przyczyna

Publiczny lub chroniony System.IntPtr albo System.UIntPtr pole nie jest tylko do odczytu.

Uwaga

Ta reguła została przestarzała. Aby uzyskać więcej informacji, zobacz Przestarzałe reguły.

Opis reguły

IntPtr i UIntPtr są typami wskaźników, które są używane do uzyskiwania dostępu do niezarządzanej pamięci. Jeśli wskaźnik nie jest prywatny, wewnętrzny lub tylko do odczytu, złośliwy kod może zmienić wartość wskaźnika, potencjalnie zezwalając na dostęp do dowolnych lokalizacji w pamięci lub powodując awarie aplikacji lub systemu.

Jeśli zamierzasz zabezpieczyć dostęp do typu zawierającego pole wskaźnika, zobacz CA2112: Typy zabezpieczone nie powinny uwidaczniać pól.

Jak naprawić naruszenia

Zabezpiecz wskaźnik, tworząc go tylko do odczytu, wewnętrzny lub prywatny.

Kiedy pomijać ostrzeżenia

Pomiń ostrzeżenie z tej reguły, jeśli nie korzystasz z wartości wskaźnika.

Przykład

Poniższy kod przedstawia wskaźniki naruszające i spełniające regułę. Zwróć uwagę, że wskaźniki inne niż prywatne naruszają również regułę CA1051: Nie deklaruj widocznych pól wystąpienia.

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: Typy zabezpieczone nie powinny ujawniać pól

CA1051: Nie deklaruj widocznych pól wystąpienia

Zobacz też