Sicherheit von AbhängigkeitseigenschaftenDependency Property Security

Abhängigkeitseigenschaften sollten im Allgemeinen als öffentliche Eigenschaften betrachtet werden.Dependency properties should generally be considered to be public properties. Die Art des Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF)-Eigenschaftensystems verhindert die Möglichkeit von Sicherheitsgarantien in Bezug auf einen Abhängigkeitseigenschaftswert.The nature of the Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) property system prevents the ability to make security guarantees about a dependency property value.

Zugriff und Sicherheit von Wrappern und AbhängigkeitseigenschaftenAccess and Security of Wrappers and Dependency Properties

Abhängigkeitseigenschaften werden in der Regel zusammen mit Common Language Runtime (CLR)common language runtime (CLR)-Wrappereigenschaften implementiert, die das Abrufen oder Festlegen der Eigenschaft aus einer Instanz vereinfachen.Typically, dependency properties are implemented along with "wrapper" Common Language Runtime (CLR)common language runtime (CLR) properties that simplify getting or setting the property from an instance. Die Wrapper sind einfach nur praktische Methoden, die die zugrunde liegende implementieren jedoch GetValue und SetValue statische Aufrufe, die bei der Interaktion mit Abhängigkeitseigenschaften verwendet werden.But the wrappers are really just convenience methods that implement the underlying GetValue and SetValue static calls that are used when interacting with dependency properties. Anders formuliert werden die Eigenschaften als Common Language Runtime (CLR)common language runtime (CLR)-Eigenschaften verfügbar gemacht, die durch eine Abhängigkeitseigenschaft anstatt durch ein privates Feld gesichert werden.Thinking of it in another way, the properties are exposed as Common Language Runtime (CLR)common language runtime (CLR) properties that happen to be backed by a dependency property rather than by a private field. Auf Wrapper angewendete Sicherheitsmechanismen gelten nicht parallel zum Verhalten des Eigenschaftensystems und zum Zugriff auf die zugrunde liegende Abhängigkeitseigenschaft.Security mechanisms applied to the wrappers do not parallel the property system behavior and access of the underlying dependency property. Platzieren eine sicherheitsforderung für den Wrapper wird nur verhindert, dass die Verwendung der Hilfsmethode aber wird nicht verhindert, dass Aufrufe von GetValue oder SetValue.Placing a security demand on the wrapper will only prevent the usage of the convenience method but will not prevent calls to GetValue or SetValue. Auch bietet das Versehen der Wrapper mit geschützten oder privaten Zugriffsebenen keine effektive Sicherheit.Similarly, placing protected or private access level on the wrappers does not provide any effective security.

Wenn Sie Ihre eigenen Abhängigkeitseigenschaften schreiben, sollten Sie die Wrapper deklarieren und die DependencyProperty -Bezeichnerfeld als öffentliche Member an, sodass Aufrufer keine Informationen über die wahre Zugriffsebene dieser Eigenschaft (aufgrund der Speicher wird irreführenden geltenden erhalten eine Abhängigkeitseigenschaft implementiert).If you are writing your own dependency properties, you should declare the wrappers and the DependencyProperty identifier field as public members, so that callers do not get misleading information about the true access level of that property (because of its store being implemented as a dependency property).

Sie können die Eigenschaft als schreibgeschützte Abhängigkeitseigenschaft registrieren, für eine benutzerdefinierte Abhängigkeitseigenschaft, und dies bietet eine effektive Möglichkeit zum Verhindern von jedem Benutzer, die einen Verweis auf nicht aufrechterhält Festlegen der Eigenschaft der DependencyPropertyKey für diese Eigenschaft.For a custom dependency property, you can register your property as a read-only dependency property, and this does provide an effective means of preventing a property being set by anyone that does not hold a reference to the DependencyPropertyKey for that property. Weitere Informationen finden Sie unter Schreibgeschützte Abhängigkeitseigenschaften.For more information, see Read-Only Dependency Properties.

Hinweis

Deklarieren einer DependencyProperty privat ist zwar zulässig, und es ist vorstellbar, dass dienen, um den sofort offengelegten Namespace einer benutzerdefinierten Klasse zu reduzieren, aber eine solche Eigenschaft sollte weder als "private", in dem Sinne wie die Common Language Runtime (CLR)common language runtime (CLR) Diese Zugriffsebene im nächsten Abschnitt beschriebenen Gründen definiert.Declaring a DependencyProperty identifier field private is not forbidden, and it can conceivably be used to help reduce the immediately exposed namespace of a custom class, but such a property should not be considered "private" in the same sense as the Common Language Runtime (CLR)common language runtime (CLR) language definitions define that access level, for reasons described in the next section.

Offenlegen des Eigenschaftensystems von AbhängigkeitseigenschaftenProperty System Exposure of Dependency Properties

Es ist nicht in der Regel sinnvoll, und es ist sogar irreführend sein, um zu deklarieren eine DependencyProperty wie jede andere als öffentliche Zugriffsebene.It is not generally useful, and it is potentially misleading, to declare a DependencyProperty as any access level other than public. Diese Zugriffsebeneneinstellung verhindert lediglich, dass jemand einen Verweis auf die Instanz aus der deklarierenden Klasse erhält.That access level setting only prevents someone from being able to get a reference to the instance from the declaring class. Es gibt jedoch mehrere Aspekte des Eigenschaftensystems, der zurückgegeben wird ein DependencyProperty als Mittel zur Identifizierung einer bestimmten Eigenschaft, wie sie auf eine Instanz einer Klasse oder einer abgeleiteten Klasseninstanz vorhanden ist, und dieser Bezeichner, kann ist ein SetValue selbst aufrufen Wenn der ursprüngliche statische Bezeichner als nicht öffentlich deklariert wird.But there are several aspects of the property system that will return a DependencyProperty as the means of identifying a particular property as it exists on an instance of a class or a derived class instance, and this identifier is still usable in a SetValue call even if the original static identifier is declared as nonpublic. Darüber hinaus OnPropertyChanged virtuelle Methoden erhalten Sie Informationen zu jeder vorhandenen Abhängigkeitseigenschaft, der Wert geändert.Also, OnPropertyChanged virtual methods receive information of any existing dependency property that changed value. Darüber hinaus die GetLocalValueEnumerator Methodenrückgabe Bezeichner für jede Eigenschaft in Instanzen mit einem lokal festgelegten Wert.In addition, the GetLocalValueEnumerator method returns identifiers for any property on instances with a locally set value.

Validierung und SicherheitValidation and Security

Eine Anforderung zum Anwenden einer ValidateValueCallback und erwartet wird der Fehler bei der Überprüfung auf einen Fehler bei Bedarf, um zu verhindern, dass eine Eigenschaft festgelegt wird, ist kein geeigneter Sicherheitsmechanismus.Applying a demand to a ValidateValueCallback and expecting the validation failure on a demand failure to prevent a property from being set is not an adequate security mechanism. Ungültigkeit von festgelegten Werten durch erzwungen ValidateValueCallback kann auch von böswilligen Aufrufern unterdrückt werden, wenn diese Aufrufer innerhalb der Anwendungsdomäne ausgeführt werden.Set-value invalidation enforced through ValidateValueCallback could also be suppressed by malicious callers, if those callers are operating within the application domain.

Siehe auchSee also