Kontrola na żądanie a kontrola typu LinkDemand

Zabezpieczenia deklaracyjne oferuje dwa rodzaje kontroli zabezpieczeń, które są podobne, ale wykonywanie bardzo różnych kontroli. Oba formularze należy przeanalizować, ponieważ błędnego wyboru może spowodować utratę słabych zabezpieczeń lub wydajności. Aby uzyskać więcej informacji, zobacz Wymaganiom bezpieczeństwa.

Zabezpieczenia deklaracyjne oferuje następujące kontrole bezpieczeństwa:

  • Żądanie określa kod dostępu zabezpieczeń stosu walk. Wszystkim komputerom wywołującym na stosie musi mieć określone uprawnienie lub tożsamości, aby przekazać. Żądanie występuje przy każdym wywołaniu, ponieważ stos może zawierać różne wywoływania. Jeśli wielokrotnie wywołuje metodę sprawdzania zabezpieczenia występuje przy każdym. Żądanie jest dobrą ochronę przed kolejnym atakach; nieautoryzowanego kodu na próby uzyskania przez niego zostanie wykryty.

  • LinkDemand się dzieje w czasie kompilacji (JIT) w czasie i sprawdza, czy tylko natychmiastowego obiektu wywołującego. Ten test zabezpieczeń nie sprawdza rozmówcy dzwoniącego. Po przebiegnie pomyślnie, nie istnieje żadne dodatkowe zabezpieczenia napowietrznych bez względu na ile razy obiekt wywołujący może wywołać. Jednakże istnieje także nie ochrony przed kolejnym ataków. Z LinkDemand, kod zostanie poddany badaniu i można odwoływać się do kodu może uszkodzić zabezpieczeń poprzez umożliwienie złośliwy kod wywołać, stosując kod upoważniony. W związku z tym, nie należy używać LinkDemand , chyba że dokładnie unikać wszystkie możliwe słabe strony.

    Uwaga

    W .NET Framework 4, LinkDemand został zastąpiony przez SecurityCriticalAttribute atrybutu w Level2 zespołów.SecurityCriticalAttribute Jest równoważne do zapotrzebowania łącze do pełne zaufanie; jednak również wpływa dziedziczenie zasad.Aby uzyskać więcej informacji o tej zmianie, zobacz Kod o przezroczystym poziomie bezpieczeństwa, poziom 2.

Dodatkowe środki ostrożności, wymagane podczas korzystania z LinkDemand musi być zaprogramowane indywidualnie; system zabezpieczeń może pomóc wykonanie. Pomyłkom otwiera słabości zabezpieczeń. Wszystkie dopuszczone kodu, że używa kodu musi być odpowiedzialne za wykonanie dodatkowych zabezpieczeń, wykonując następujące czynności:

  • Ograniczanie dostępu kod wywołujący do klasy lub zestawu.

  • Wprowadzenie do bezpieczeństwa tych samych kontroli kod wywołujący, które pojawiają się na wywoływanego kodu i zobowiązującą jego kodu wywołującego w tym celu. Na przykład, jeśli pisać kod, który wywołuje metodę są chronione za pomocą LinkDemand do SecurityPermission z UnmanagedCode określona flaga, powinno również zawierać metodę LinkDemand (lub na żądanie, który jest silniejszy) dla tego uprawnienia. Wyjątkiem jest, jeśli używa kodu LinkDemand-metoda chroniona w ograniczony sposób zdecydujesz jest bezpieczne, biorąc pod uwagę inne mechanizmy ochrony bezpieczeństwa (np. zapotrzebowanie) w kodzie. W tym wyjątkowym przypadku wywołujący przejmuje odpowiedzialność w osłabienia ochrony zabezpieczeń odpowiedniego kodu.

  • Zapewnienie, że Twój kod wywołujący nie może skłonić kodu do wywoływania kodu chronionych w ich imieniu. Innymi słowy wywołujący nie może wymusić kod upoważniony do przekazania parametrów określonych do kodu chronionych lub odzyskać wyniki z niego.

Interfejsy i LinkDemand

Jeśli metoda wirtualna, właściwości lub zdarzenia z LinkDemand zastępuje metodę klasy podstawowej, metoda klasy bazowej musi także mieć taki sam LinkDemand dla zastąpiona metoda w celu zapewnienia efektywności. Jest możliwe dla złośliwego kodu rzutować typu podstawowego, a następnie wywołać metodę klasy podstawowej. Również należy zauważyć, że łącze zapotrzebowania mogą być dodawane niejawnie do zestawów, które nie mają AllowPartiallyTrustedCallersAttribute poziom zestawu atrybutów.

Jest dobrą praktyką ochrony implementacje metod żądających łącza, gdy metody interfejsu również LinkDemand. Uwaga następujące informacje LinkDemand przy użyciu interfejsów:

  • AllowPartiallyTrustedCallersAttribute atrybut stosuje się również do interfejsów.

  • Można umieścić LinkDemand interfejsach selektywnie chronić niektóre interfejsy z używany przez częściowo zaufany kod, takie jak podczas korzystania z AllowPartiallyTrustedCallersAttribute atrybut.

  • Jeśli masz zdefiniowany w zestawie nie zawiera interfejsu AllowPartiallyTrustedCallersAttribute atrybut, można zaimplementować interfejsu klasy częściowo zaufanych.

  • Jeśli umieścisz LinkDemand na publicznej metody klasy, która implementuje metody interfejsu LinkDemand nie będą wymuszane, jeśli następnie oddać do interfejsu i wywołania metody. W tym przypadku ponieważ połączone przeciwko tylko interfejs LinkDemand na interfejsie jest honorowane.

Przejrzyj następujące elementy w rozwiązywaniu problemów z zabezpieczeniami:

  • Jawne łącze zapotrzebowanie na metody interfejsu. Upewnij się, że te LinkDemand oferują oczekiwaną ochronę. Określić, czy złośliwy kod, można użyć oddanych do poruszania się LinkDemand w sposób opisany wcześniej.

  • Wirtualne metod żądających łącza zastosowane.

  • Typy i interfejsy, które wdrażają. Powinny one stosować konsekwentnie LinkDemand.

Zobacz też

Inne zasoby

Wytyczne dotyczące bezpiecznego programowania