Überschreiben von Sicherheitsüberprüfungen

Bei einer Sicherheitsüberprüfung werden normalerweise alle Aufrufer in der Aufrufliste untersucht, um sicherzustellen, dass allen Aufrufern die angegebene Berechtigung erteilt wurde. Sie können das Ergebnis von Sicherheitsüberprüfungen jedoch überschreiben, indem Sie Assert oder PermitOnly für ein einzelnes Berechtigungsobjekt oder ein Berechtigungssatzobjekt aufrufen. Je nach aufgerufener Methode kann die Sicherheitsüberprüfung fehlschlagen oder funktionieren, selbst wenn die Berechtigungen der Aufrufer in der Aufrufliste nicht überprüft wurden.

Wichtig

In .NET Framework 4 wurde die Laufzeitunterstützung zum Erzwingen der Deny-Berechtigungsanforderung und der RevertDeny-Berechtigungsanforderung entfernt.Diese Anforderungen sollten nicht in Code verwendet werden, der auf .NET Framework 4 oder höher basiert.Weitere Informationen über diese und andere Änderungen finden Sie unter Änderungen der Sicherheit in .NET Framework.

Bei jedem Aufruf einer Methode durch eine andere Methode wird ein neuer Rahmen in der Aufrufliste generiert, in dem die Informationen über die aufgerufene Methode gespeichert werden. (Die Verwendung von Konstruktoren und der Zugriff auf Eigenschaften werden in diesem Kontext als Methodenaufrufe angesehen.) Jeder Rahmen in der Liste enthält Informationen zu allen Aufrufen von Assert oder PermitOnly durch die Methode. Wenn ein Aufrufer Assert oder PermitOnly in demselben Methodenaufruf mehrfach verwendet, wendet die Laufzeit die folgenden Verarbeitungsregeln an, die sich auf das Verhalten beim Überschreiben auswirken können:

  • Wenn die Laufzeit während des Stackwalks ein mehrfaches Überschreiben desselben Typs, z. B. zwei Aufrufe von Assert, in einem Stapelrahmen entdeckt, wird beim zweiten Überschreiben eine Ausnahme ausgelöst.

  • Wenn in einem Stapelrahmen mehrere verschiedene Überschreibungen enthalten sind, verarbeitet die Laufzeit zuerst PermitOnly und dann Assert.

Um eine Überschreibung zu ersetzen, rufen Sie zunächst die entsprechende Methode zur Wiederherstellung auf (z. B. RevertAssert) und wenden anschließend die neue Überschreibung an.

Hinweis

Überschreibungen von Stackwalks sollten nie in einem Klassenkonstruktor vorgenommen werden, da Code des Klassenkonstruktors nicht unbedingt an einem bestimmten Punkt oder in einem bestimmten Kontext ausgeführt wird.Da der Zustand der Aufrufliste in einem Klassenkonstruktor nicht genau definiert ist, können Überschreibungen des Stackwalks in Konstruktoren zu unerwarteten und unerwünschten Ergebnissen führen.

Assert und PermitOnly müssen von Anwendungsentwicklern normalerweise gar nicht und von Komponenten- und Klassenbibliotheksentwicklern nur selten verwendet werden. Sicherheitsüberschreibungen bieten sich jedoch in einigen Fällen an, die in den Abschnitten Assert und PermitOnly beschrieben sind.

Hinweis

Wenn Sie eine Überschreibung ausführen (Assert oder PermitOnly), müssen Sie die Berechtigung zurücksetzen, bevor dieselbe Überschreibungsart in demselben Stapelrahmen (d. h. derselben Methode) ausgeführt werden kann.Andernfalls wird eine SecurityException ausgelöst.

Setzen Sie eine Überschreibung mit einer der statischen Methoden zurück, die in der folgenden Tabelle aufgeführt sind.

Methode

Aktion der Methode

CodeAccessPermission.RevertAll

Veranlasst, dass alle vorhergehenden Überschreibungen für den aktuellen Rahmen entfernt werden und nicht mehr wirksam sind.

CodeAccessPermission.RevertAssert

Veranlasst, dass ein vorhergehendes Assert für den aktuellen Rahmen entfernt wird und nicht mehr wirksam ist.

CodeAccessPermission.RevertPermitOnly

Veranlasst, dass ein vorhergehendes PermitOnly für den aktuellen Rahmen entfernt wird und nicht mehr wirksam ist.

Siehe auch

Referenz

Verwenden der Assertions-Methode

Verwenden der PermitOnly-Methode

Konzepte

Erstellen von sicheren Klassenbibliotheken

Weitere Ressourcen

Codezugriffssicherheit