Udostępnij za pośrednictwem


Żądania

Można użyć wywołania popyt zabezpieczenia sposób deklaratywny lub bezwzględnie Aby określić uprawnienia to bezpośrednie lub pośrednie wywołujący musi mieć dostępu do biblioteki. Bezpośredniego wywoływania jawnie wywołać statyczne lub metody instancji biblioteki podczas wywołania pośrednich dzwoniącym statyczne lub metody instancji innej biblioteki, który wywołuje biblioteki. Kiedy używasz zapotrzebowanie, każda aplikacja, która zawiera kod będzie wykonywał tylko wtedy, gdy wszystkie obiekty wywołujące bezpośrednie i pośrednie uprawnienia, które określa popytu. Wymagania są szczególnie przydatne w sytuacjach, w których biblioteki klas używa chronionych zasobów, których nie chcesz uzyskiwać przez niezaufany kod. Wymagania mogą być umieszczone w kodzie przy użyciu składni konieczne lub deklaracyjne.

Należy zauważyć, że większość klas.NET Framework już wymagań związanych z nimi, dzięki czemu nie trzeba wprowadzić dodatkową podaż przy każdym użyciu klasy, która uzyskuje dostęp do chronionego zasobu. Na przykład StreamWriter klasy automatycznie zwiększa popyt zabezpieczenia na FileIOPermission każdym przypadku, gdy jest otwarty. Jeśli dokonasz popyt na FileIOPermission użycie StreamWriter klasy, będzie powodować Idź stosu nadmiarowe i nieefektywne występuje. Wymagania należy używać do ochrony własnych zasobów, które wymagają uprawnienia niestandardowe.

Wymagania mogą być deklaracyjne lub konieczne.

Chodzi stosu

Wymagania wymuszenia zabezpieczeń, przeprowadzając analizę (nazywane Idź stosu) w której badane co wywoływania funkcji (lub ramki stosu) bieżącego stosu wywołań określone uprawnienie. Po wyzwoleniu zapotrzebowanie mają miejsce następujące zdarzenia.

  • Idź stosu rozpoczyna się od ramek stosu wywołań nie bieżącego stosu gdzie występuje zapotrzebowanie. Na przykład jeśli wywołania metody A Metoda B i metoda B jest zapotrzebowanie, Idź stosu rozpoczyna się od ramek stosu metoda 's. Metoda B nigdy nie zostanie potraktowana jako część Idź stosu.

  • Idź stosu przechodzi przez stos wywołań aż do napotkania punktu wejścia programu stosu (zazwyczaj Main metoda) lub do momentu modyfikator przeszukiwania stosu jak znaleźć assert. Informacji na temat Zobacz modyfikatorów Idź stosu Zastępowanie sprawdzania zabezpieczeń.

  • Gdy zapotrzebowanie oraz modyfikator przeszukiwania stosu (assert, na przykład) dla danego uprawnienia pojawiają się w tej samej ramce stosu, popyt ma pierwszeństwo.

  • Składnia deklaracyjne i bezwzględne wykazują żadnej różnicy w zachowaniu.

  • Należy zauważyć, że zapotrzebowanie na punktu wejścia programu nigdy nie pobiera oceniane ponieważ chodzi stosu zawsze rozpoczyna się od wywołanie stosu ramki, ale w tym przypadku nie ma bez takich wywołującego ramki do oceny. Zatem wymogi stawiane punktu wejścia programu zawsze kończą się pomyślnie.

Deklaracyjne wymagania

Wymagania deklaracyjne umieścić informacje do metadanych w kodzie za pomocą atrybutów. Składnia deklaracyjne umożliwia miejsce zapotrzebowanie w klasie lub poziom metody kodu.

Jeśli umieścisz wyboru Zabezpieczenia deklaracyjne na poziomie klasy, stosuje się do każdego członka klasy. Jednak jeśli umieścisz wyboru deklaracyjne zabezpieczenia na poziomie elementu członkowskiego to dotyczy tylko tego członka i zastępują uprawnienia określone na poziomie klasy, jeśli taki istnieje. Na przykład załóżmy, że określisz w klasie poziomu tego PermissionA jest wymagany, a dla tej klasy metoda 1 możesz zaznaczyć, czy wymagana jest PermissionB. Kiedy wywoływana jest metoda 1, sprawdzania zabezpieczeń będzie szukał tylko PermissionB, ale inne metody klasy nadal wymaga PermissionA.

Poniższy przykład umieszcza deklaracyjne zapotrzebowanie na uprawnienia niestandardowe, o nazwie CustomPermission na wszystkie obiekty wywołujące z ReadData metody. To uprawnienie jest hipotetycznym uprawnienia niestandardowym i nie istnieje w programie .NET Framework. Ma odrębnie określonych uprawnień niestandardowych CustomPermissionAttribute sprawia, że popyt. W tym przypadku przejście SecurityAction.Demand flagi, aby określić typ atrybut będzie wykonywał żądanie.

<CustomPermissionAttribute(SecurityAction.Demand, Unrestricted := True)>Public Shared Function  ReadData() As String
   'Read from a custom resource.
End Function
[CustomPermissionAttribute(SecurityAction.Demand, Unrestricted = true)]
public static string ReadData()
{
   //Read from a custom resource.
}

Wymagania konieczne

Konieczne są stawiane w metodzie poziomu kodu przez nowe wystąpienie obiektu uprawnienie Tworzenie i wywoływanie tego obiektu żądanie metody. Składnia konieczne nie można umieścić żądania na poziomie klasy.

Żądanie konieczne, który można umieścić w kodzie skutecznie pomaga chronić wszystkie pozostałe kod w metodzie, w którym żądanie wywoływana jest metoda. Sprawdzanie zabezpieczenia jest wykonywane po żądanie jest wykonywana; Jeśli sprawdzanie zabezpieczeń zakończy się niepowodzeniem, SecurityException jest generowany, a pozostała część kodu w tej metody lub członka nigdy nie jest wykonywany, chyba że SecurityException jest złowione i poddane obróbce.

W poniższym przykładzie użyto składni konieczne do miejsce zapotrzebowanie na wszystkie obiekty wywołujące dla uprawnień niestandardowych CustomPermission. Kod ten tworzy nowe wystąpienie CustomPermission klasy, przekazując PermissionState.Unrestricted flagi do konstruktora. Żądanie następnie wywoływana jest metoda.

Public Shared Sub ReadData()
   Dim MyPermission As New CustomPermission(PermissionState.Unrestricted)
   MyPermission.Demand()
   'Read from a custom resource.
End Sub  
public static void ReadData()
{
   CustomPermission MyPermission = new CustomPermission(PermissionState.Unrestricted);
   MyPermission.Demand();

   //Read from a custom resource.
}

Uwaga

Zachowanie optymalizacji dla operacji żądanie różni się między 64-bitowe i 32-bitowych platformach. Na platformach 64-bitowych żądanie nie będzie sprawdzać zestaw dotacji zestawu zawierającego żądanie w przypadkach, gdzie występują inne zestawy wywołującego. Optymalizacja nie powoduje jednak podniesienie uprawnień, ponieważ Idź stosu jest nadal wykonywane podczas wywoływania zestawy są obecne. Na platformach 32-bitowych operacji żądanie sprawdza zestaw dotacji zestawu zawierającego popytu i wszystkie zestawy wywołującego.

Zobacz też

Informacje

SecurityException

Koncepcje

Żądania dotyczące zabezpieczeń

Tworzenie własnych uprawnień do dostępu kodu

Dodawanie obsługi zabezpieczeń deklaracyjnych

Pisanie zabezpieczonych bibliotek klas

Inne zasoby

Rozszerzanie metadanych za pomocą atrybutów

Zabezpieczenia dostępu kodu