Żądania dotyczące zabezpieczeń

Aby zapewnić, że tylko wywołujący z przyznanymi określonymi uprawnieniami mogą wywoływać dany kod, można zażądać, aby posiadanie przez wywołujących określonego uprawnienia lub zbioru uprawnień było obligatoryjne. Żądanie powoduje, że środowisko wykonawcze sprawdzania zabezpieczenia, aby wymusić ograniczenia wobec wywoływania kodu. Podczas sprawdzania zabezpieczeń środowisko wykonawcze przeszukuje stos wywołań, badając uprawnienia każdego obiektu wywołującego w stosie i określając, czy każdemu obiektowi udzielono żądanych uprawnień. Jeśli zostanie znaleziony obiekt wywołujący, który nie ma wymaganego uprawnienia, sprawdzanie zabezpieczeń kończy się niepowodzeniem i jest generowany wyjątek SecurityException. Jedyne zapotrzebowania nie powodujące przeszukiwania stosu to zapotrzebowania na łącza, które sprawdzają tylko bezpośredniego wywołującego.

Może spowodować, aby sprawdzanie zabezpieczeń miało miejsce przy każdym wywołaniu określonej metody lub przed wykonaniem określonego bloku kodu. Jeśli chcesz, aby sprawdzanie zabezpieczeń następowało, gdy wywoływany jest każdy członek danej klasy, można umieścić żądanie przed klasą, dzięki czemu będzie stosowane się do każdego członka klasy. W pozostałej części tego tematu wyjaśniono, jak utworzyć wymagania zabezpieczeń, kiedy należy to zrobić i dlaczego można wybrać jeden typ żądania zabezpieczeń, a nie inny.

Jeśli piszesz bibliotekę, która uzyskuje bezpośredni dostęp do chronionego zasobu, a dostęp ten jest widoczny dla obiektu wywołującego, należy w bibliotece umieścić żądanie zabezpieczeń, aby pomóc sprawdź, czy wszystkie obiekty wywołujące w stosie wywołań mają uprawnienie dostępu do tego zasobu. Twoje żądania mogą być deklaratywne lub imperatywne. Należy zwrócić uwagę, że żądania 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, żądania kierowane do konstruktorów klas mogą dawać wyniki nieprzewidziane i niepożądane.

Należy użyć następujących wytycznych, bez względu na rodzaj wprowadzanego żądania:

  • Upewnij się, że obiekt może być utworzony tylko przez obiekty wywołujące, które mają określone uprawnienia, przez umieszczenie żądania na poziomie klasy tego obiektu. Załóżmy, że masz klasę o nazwie myFileStream, która pochodzi z klasy FileStream, i chcesz upewnić się, że tylko autoryzowane obiekty wywołujące mogą utworzyć wystąpienia klasy myFileStream. Należałoby umieścić żądanie deklaratywne dla obiektu FileIOPermission reprezentującego prawa dostępu do strumienia utworzonego przez myFileStream na poziomie klasy w klasie myFileStream.

  • Można również umieścić w kodzie żądania ustawienia lub pobrania właściwości. Ogólnie rzecz biorąc należy umieścić żądania o mniej restrykcyjne uprawnienia w metodzie dostępu pobierania niż w metodzie dostępu ustawiania, chyba że właściwość posiada poufne informacje, takie jak hasła.

    Uwaga

    Sprawdzanie zabezpieczeń opartych na rolach ma nieco inną semantykę niż sprawdzanie zabezpieczeń dostępu do kodu.Aby uzyskać więcej informacji, zobacz Zabezpieczenia oparte na rolach.

    Uwaga

    Żądania mogą być stosowane tylko na poziomach klas, metod, zdarzeń i właściwości; zespoły i poszczególni członkowie zmiennych nieprywatnych nie są chronieni przez żądania.Żądania kierowane na poziomie zestawu lub zmiennej nieprywatnej nie spowodują wygenerowania ostrzeżenia przez kompilator.Dlatego ważne jest korzystanie z właściwości zamiast publicznych elementów członkowskich w celu zapewnienia ochrony zapewnianej przez żądania.

Zobacz też

Informacje

SecurityException

Koncepcje

Pisanie zabezpieczonych bibliotek klas

Inne zasoby

Zabezpieczenia dostępu kodu