Udostępnij za pośrednictwem


Zastępowanie sprawdzania zabezpieczeń

Zwykle sprawdzanie zabezpieczeń analizuje każdy obiekt wywołujący w stosie wywołań w celu zapewnienia, że każdy obiekt wywołujący ma przyznane określone uprawnienie. Jednak wyniki sprawdzania zabezpieczeń można zastąpić przez wywołanie metody Assert lub PermitOnly na indywidualnym obiekcie uprawnienia lub obiekcie zestawu uprawnień. W zależności od tego, które z tych metod zostaną wywołane, można spowodować sukces lub niepowodzenie sprawdzania zabezpieczeń, mimo że uprawnienia wszystkich obiektów wywołujących wobec stosu nie zostały sprawdzone.

Ważne

W programie .NET Framework 4 usunięto obsługę środowiska wykonawczego dla wymuszania żądań o uprawnienia Deny i RevertDeny.Żądania te nie powinny być używane w kodzie, który jest oparty na wersji .NET Framework 4 lub nowszej.Aby uzyskać informacje o tych i innych zmianach, zobacz Zmiany zabezpieczeń w programie .NET Framework.

Zawsze, gdy jedna metoda wywołuje metodę inną, nowa ramka jest generowana w stos wywołań do przechowywania informacji o metoda wywoływanej. (Używanie konstruktorów i uzyskiwanie dostępu do właściwości jest uważane za wywołanie metod w tym kontekście.) Każda ramka stosu zawiera informacje o wszelkich wywołaniach metody do metod zabezpieczeń Assert lub PermitOnly. Jeśli obiekt wywołujący korzysta z więcej niż jednego sprawdzania zabezpieczeń Assert lub PermitOnly w tym samym wywołaniu metody, środowisko wykonawcze stosuje następujące reguły przetwarzania, co może wpłynąć na zachowania zastępowania:

  • Jeśli podczas przeszukiwania stosu środowisko wykonawcze wykryje więcej niż jedno zastąpienie tego samego typu (czyli dwa wywołania metody Assert) w jednej ramce stosu, drugie zastąpienie powoduje wygenerowanie wyjątku.

  • Kiedy różne zastąpienia występują w tej samej ramce stosu, środowisko uruchomieniowe przetwarza te zastąpienia w następującej kolejności: PermitOnly, a następnie Assert.

Aby zastąpić, najpierw wywołaj odpowiednią metodę Revert (na przykład RevertAssert), a następnie zastosuj nowe zastępowanie.

Uwaga

Zastąpienia przeszukiwania stosu nie powinny być nigdy przeprowadzane w konstruktorze klasy, ponieważ kod konstruktora klasy może nie zadziałać w danym punkcie lub w określonym kontekście.Ponieważ stan stosu wywołań w konstruktorze klasy nie jest dobrze zdefiniowany, zastąpienia przeszukiwań stosów stosowane do konstruktorów mogą dawać wyniki nieprzewidziane i niepożądane.

Deweloperzy aplikacji zwykle nie muszą używać metod zabezpieczeń Assert i PermitOnly, a deweloperzy bibliotek składników i klas rzadko ich potrzebują. Jednak zastąpienia zabezpieczeń są odpowiednie w niektórych sytuacjach, które są opisane w tematach poświęconych metodom zabezpieczeń Assert i PermitOnly.

Uwaga

Jeżeli wykonujesz zastąpienie (metodą Assert lub PermitOnly), należy przywrócić uprawnienie, zanim będzie można wykonać taki sam rodzaj zastąpienia w tej samej ramce stosu (czyli metodzie).W przeciwnym razie SecurityException zostanie wygenerowany.

Użyj jednej z metod statycznych wymienionych w poniższej tabeli, aby przywrócić zastąpienie.

Metoda

Akcja metody

CodeAccessPermission.RevertAll

Powoduje, że wszystkie poprzednie zastąpienia dla bieżącej klatki są usuwane i już nie obowiązują.

CodeAccessPermission.RevertAssert

Powoduje, że wszystkie poprzednie metody zabezpieczeń Assert dla bieżącej klatki są usuwane i już nie obowiązują.

CodeAccessPermission.RevertPermitOnly

Powoduje, że wszystkie poprzednie metody zabezpieczeń PermitOnly dla bieżącej klatki są usuwane i już nie obowiązują.

Zobacz też

Informacje

Za pomocą metody Assert

Przy użyciu metody PermitOnly

Koncepcje

Pisanie zabezpieczonych bibliotek klas

Inne zasoby

Zabezpieczenia dostępu kodu