Sdílet prostřednictvím


Požadavky zabezpečení

Chcete-li zajistit, aby pouze volající, kterým bylo uděleno specifikované oprávnění mohli volat váš kód, můžete deklarativně nebo imperativně požadovat, aby volající vašeho kódu měli zvláštní oprávnění nebo sadu oprávnění. Požadavek způsobí, že modul runtime provede kontrolu zabezpečení, aby vynutil omezení u volajícího kódu. Během kontroly zabezpečení modul runtime prochází zásobník volání, zkoumá oprávnění každého volajícího v zásobníku a určuje, zda požadované oprávnění bylo uděleno každému volajícímu. Pokud je nalezen volající, který nemá požadované oprávnění, selže kontrola zabezpečení a je vyvolána výjimka SecurityException. Jediné požadavky, které nekončí v procházení zásobníku jsou link demands, které kontrolují pouze okamžitého volajícího.

Můžete zapříčinit, aby kontrola zabezpečení proběhla pokaždé, když je volána určitá metoda nebo před provedením určitého bloku kódu. Pokud chcete, aby ke kontrole zabezpečení došlo, když je zavolán nějaký člen určité třídy, můžete umístit požadavek před třídu tak, aby se vztahoval na každý člen dané třídy. Zbývající část tohoto tématu vysvětluje, jak vytvořit požadavky zabezpečení, kdy byste tak měli učinit a proč můžete zvolit jeden typ požadavku zabezpečení před jiným.

Pokud vytváříte knihovnu, která přímo přistupuje k chráněnému prostředku a pokud je tento přístup vystaven volajícímu, musíte v knihovně vytvořit požadavek zabezpečení, abyste pomohli ověřit, zda všichni volající v zásobníku volání mají oprávnění pro přístup k danému prostředku. Vaše požadavky mohou být deklarativní nebo imperativní. Uvědomte si, že požadavky by nikdy neměly být vytvořeny v konstruktoru třídy, protože kód konstruktoru třídy není zaručen provádět v libovolném specifickém bodě nebo v kontextu. Protože stav zásobníku volání v konstruktoru třídy není dobře definovaný, požadavky umístěné v konstruktorech třídy mohou produkovat neočekávané a nežádoucí výsledky.

Měli byste používat následující pokyny, bez ohledu na typ požadavku, který vytváříte:

  • Pomocí umístění požadavku na úrovni třídy objektu zajistíte, že objekt může být vytvořen pouze volajícími, kteří mají určité oprávnění. Předpokládejme například, že máte třídu nazvanou myFileStream, která je odvozena ze třídy FileStream a chcete zajistit, aby pouze oprávnění volající mohli vytvářet instance třídy myFileStream. Na úrovni třídy myFileStream byste umístili deklarativní požadavek pro objekt FileIOPermission, který představuje právo pro přístup k datovému proudu vytvořenému třídou myFileStream.

  • Můžete také umístit požadavky v kódu, který nastavuje nebo získává vlastnost. Obecně platí, že je lepší umísťovat požadavky pro méně omezující oprávnění u přistupující metody get, spíše než u přistupující metody set, pokud vlastnost neobsahuje citlivé informace, jako je například heslo.

    PoznámkaPoznámka

    Kontroly zabezpečení založené na roli mají mírně odlišnou sémantiku než kontroly zabezpečení přístupu kódu.Další informace naleznete v tématu Role-Based Security.

    PoznámkaPoznámka

    Požadavky mohou být použity pouze na úrovních tříd, metod, událostí a vlastností; sestavení a jednotliví ne privátní členové proměnných nejsou chráněny požadavky.Požadavky umístěné na úrovni sestavení nebo na úrovni ne privátní proměnné nebudou vytvářet upozornění kompilátoru.Proto je důležité použít vlastnosti místo veřejných členů s cílem zajistit ochranu, kterou poskytují požadavky.

Viz také

Odkaz

SecurityException

Koncepty

Zabezpečení přístupu kódu

Psaní zabezpečených knihoven tříd

Historie změn

Datum

Poslední dokumenty

Důvod

Červenec 2010

Odebrání zastaralých informací.

Oprava chyby obsahu