Sdílet prostřednictvím


Zeiger sollten nicht sichtbar sein

Aktualisiert: November 2007

     TypeName

PointersShouldNotBeVisible

CheckId

CA2111

Kategorie

Microsoft.Security

Unterbrechende Änderung

Breaking

Ursache

Ein öffentliches oder geschütztes System.IntPtr-Feld oder System.UIntPtr-Feld ist nicht schreibgeschützt.

Regelbeschreibung

IntPtr und UIntPtr sind Zeigertypen, die verwendet werden, um auf nicht verwalteten Arbeitsspeicher zuzugreifen. Wenn ein Zeiger nicht privat, intern oder schreibgeschützt ist, kann bösartiger Code den Wert des Zeigers ändern und damit Zugriffe auf beliebige Speicherbereiche ermöglichen oder Anwendungs- bzw. Systemfehler verursachen.

Wenn Sie Zugriff auf den Typ, der das Zeigerfeld enthält, schützen möchten, lesen Sie Gesicherte Typen sollten keine Felder verfügbar machen.

Behandlung von Verstößen

Schützen Sie den Zeiger, indem Sie ihn als schreibgeschützt, intern oder privat deklarieren.

Wann sollten Warnungen unterdrückt werden?

Unterdrücken Sie eine Warnung dieser Regel, wenn der Wert des Zeigers nicht von maßgeblicher Bedeutung ist.

Beispiel

Im folgenden Code werden Zeiger veranschaulicht, die gegen die Regel verstoßen, und Zeiger, die der Regel entsprechen. Beachten Sie, dass auch nicht-private Zeiger gegen die Regel Sichtbare Instanzenfelder nicht deklarieren verstoßen.

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

Verwandte Regeln

Gesicherte Typen sollten keine Felder verfügbar machen

Sichtbare Instanzenfelder nicht deklarieren

Siehe auch

Referenz

System.IntPtr

System.UIntPtr