Udostępnij za pośrednictwem


CA2111: Wskaźniki nie powinny być widoczne

TypeName

PointersShouldNotBeVisible

CheckId

CA2111

Kategoria

Microsoft.Security

Zmiana kluczowa

Kluczowa

Przyczyna

Pole publiczne lub chronione System.IntPtr lub System.UIntPtr nie jest tylko do odczytu.

Opis reguły

IntPtr i UIntPtr są typami wskaźnika, które są używane w celu dostępu do pamięci niezarządzanej.Jeżeli wskaźnik nie jest prywatny, wewnętrzny lub tylko do odczytu, złośliwy kod może zmienić wartość wskaźnika, potencjalnie umożliwiając dostęp do dowolnego miejsca w pamięci lub powodując błędy aplikacji lub systemu.

Jeśli zamierzasz uzyskać bezpieczny dostęp do typu, który zawiera pole wskaźnikowe, zobacz CA2112: Zabezpieczonych typów nie powinny wystawiać pól.

Jak naprawić naruszenia

Zabezpiecz wskaźnik poprzez ustawienie go na tylko do odczytu, wewnętrzny lub prywatny.

Kiedy pominąć ostrzeżenia

Ostrzeżenie od tej reguły można pominąć, jeśli nie polega się na wartości wskaźnika.

Przykład

Poniższy kod przedstawia wskaźniki, które naruszają i spełniają tą regułę.Należy zauważyć,że wskaźniki, które nie są prywatne również naruszają tą regułę CA1051: Nie są deklarowane widoczne instancji pola.

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

Powiązane reguły

CA2112: Zabezpieczonych typów nie powinny wystawiać pól

CA1051: Nie są deklarowane widoczne instancji pola

Zobacz też

Informacje

System.IntPtr

System.UIntPtr