Požadování oprávnění
Důležité |
---|
V rozhraní .NET Framework verze 4 byla odebrána podpora modulu runtime pro následující žádosti o oprávnění: RequestMinimum, RequestOptional a RequestRefuse. Tato kapitola se nevztahuje na kód, který je založen na .NET Framework 4 nebo na novější verzi. Další informace o této a dalších změnách naleznete v tématu Změny zabezpečení v rozhraní .NET Framework 4. |
Požadování oprávnění představuje způsob, jak dát modulu runtime vědět, co váš kód potřebuje, aby byl schopen pracovat. Oprávnění pro sestavení můžete požadovat pomocí umístění atributů (deklarativní syntaxe) v rozsahu platnosti sestavení, které náleží vašemu kódu. Když je sestavení vytvořeno, kompilátor jazyka ukládá požadovaná oprávnění v manifestu sestavení. V okamžiku načtení modul runtime ověřuje požadavky o oprávnění a aplikuje pravidla zásad zabezpečení, aby rozhodl, jaká oprávnění udělit sestavení. Požadavky pouze ovlivňují modul runtime v tom, aby vašemu kódu odepřel oprávnění a nikdy ho neovlivňují v tom, aby vašemu kódu udělil více oprávnění než byla udělena. Lokální zásady správy vždy mají konečnou kontrolu nad maximálními oprávněními, která jsou udělena vašemu kódu.
Poznámka |
---|
Kód, který se má nacházet v počítači je ve výchozím nastavení spuštěn v My_Computer_Zone a má úplný vztah důvěryhodnosti. Úplný vztah důvěryhodnost zapříčiňuje, že všechny požadavky o oprávnění budou schváleny.Požadavky o oprávnění jsou vždy úspěšné i pro oprávnění identit, kde není splněna podmínka identity.Pokud zamýšlíte, že váš kód poběží pouze v My_Computer_Zone, tak nemá smysl žádat o oprávnění. Pokud však by měl váš kód běžet v jakékoliv jiné zóně, tak vyžádání oprávnění je doporučeno. |
Poznámka |
---|
V rozhraní .NET Framework 3.5 Service Pack 1 a novějším jsou aplikace ve sdíleném prostoru v intranetu implicitně spuštěny jako plně důvěryhodné.Pokud je aplikace určena ke spuštění ze sdílené složky, bude spuštěna jako plně důvěryhodná, stejně jako aplikace, která je umístěna v počítači.Další informace naleznete v tématu Spouštění intranetových aplikací v úplném vztahu důvěryhodnosti. |
I když váš kód nemusí žádat o oprávnění, aby mohl běžet jako částečně důvěryhodný, jsou zde důležité důvody, proč by váš kód měl vždy o oprávnění žádat:
Požadování oprávnění zvyšuje pravděpodobnost, že kód bude pracovat správně, pokud má povolení ke spuštění. Kód, který žádá minimální množinu oprávnění, nebude možné spustit, dokud neobdrží tato oprávnění. Pokud neidentifikujete minimální množinu oprávnění, váš kód musí řádně zpracovat všechny situace, kde nejsou udělena nějaká oprávnění, což může zabránit jeho správnému spuštění.
Požadování oprávnění pomáhá zajistit, aby váš kód měl uděleny pouze taková oprávnění, která potřebuje. Pokud vašemu kódu nejsou udělena zvláštní oprávnění, nemůže poškodit prostředky, které jsou chráněny těmito zvláštními oprávněními, dokonce i když je zneužit škodlivým kódem nebo má chyby, které lze využít k poškození zdrojů. Měli byste požadovat pouze taková oprávnění, která váš kód potřebuje a nic víc.
Požadování oprávnění umožňuje správcům znát minimální oprávnění, která aplikace potřebuje, takže mohou odpovídajícím způsobem upravit zásady zabezpečení. Oprávnění, která požaduje vaše aplikace můžete určit z karty zabezpečení na stránce vlastnosti projektu v aplikaci Visual Studio. Pokud správce nezná tyto informace, je obtížné spravovat vaší aplikaci.
Požadování oprávnění informuje modul runtime o tom, která oprávnění vaše aplikace potřebuje k práci nebo naopak, která výslovně nechce. Například, pokud vaše aplikace zapisuje na místní pevný disk bez použití izolovaného úložiště, tak vaše aplikace musí mít FileIOPermission. Pokud váš kód nepožaduje FileIOPermission a místní nastavení zabezpečení neumožňuje, aby vaše aplikace měla tyto oprávnění, tak je vyvolána výjimka zabezpečení v momentě, kdy se aplikace pokusí zapsat na disk. I v případě, že aplikace je schopna zpracovat výjimku, nebude mít povoleno zapisovat na disk. Toto chování může být pro uživatele frustrující, pokud vaše aplikace je program na úpravu textu, který používali dlouhou dobu. Na druhé straně, pokud vaše aplikace požaduje FileIOPermission a místní nastavení zabezpečení neumožňuje, aby vaše aplikace měla FileIOPermission, tak aplikace při spuštění vygeneruje výjimku a uživatel nebude čelit problému ztráty nějaké práce. Dále, pokud vaše aplikace požaduje FileIOPermission a pokud jde o důvěryhodnou aplikaci, tak správce může upravit zásady zabezpečení, aby aplikace mohla být spuštěna ze vzdáleného sdíleného prostoru.
Pokud váš kód nepřistupuje k chráněným prostředkům nebo neprovádí chráněné operace, nemusíte žádat o žádné oprávnění. Například, požadavek o oprávnění pravděpodobně nebude nutný, pokud kód jednoduše počítá výsledek bez použití nějakých prostředků, kdy tento výsledek je založený na vstupech, které jsou mu předány. Pokud váš kód přistupuje k chráněným prostředkům, ale nepožaduje nutná oprávnění, tak stále může být spuštěn, ale pravděpodobně v určitém okamžiku během provádění dojde k selhání, pokud se pokusí o přístup k prostředku, pro který nemá potřebná oprávnění.
Abyste mohli žádat o oprávnění, je nutné, abyste věděli, které zdroje a chráněné operace používá váš kód a také musíte vědět, která oprávnění chrání tyto prostředky a operace. Kromě toho je třeba udržovat přehled o veškerých prostředcích, ke kterým přistupují metody knihovny tříd, které jsou volány vašimi komponentami. Seznam přístupových oprávnění kódu, které jsou součástí rozhraní .NET Framework naleznete v tématu Permissions.
Následující tabulka popisuje typy požadavků oprávnění.
Žádost o oprávnění |
Popis |
---|---|
Minimální oprávnění (RequestMinimum) |
Oprávnění, která váš kód musí mít, aby mohl být spuštěn. |
Volitelná oprávnění (RequestOptional) |
Oprávnění, která váš kód může použít, ale je schopen efektivně běžet i bez nich. Tato žádost implicitně odmítá všechna jiná oprávnění, která nejsou výslovně požadována. |
Zamítnutá oprávnění (RequestRefuse) |
Oprávnění, u kterých chcete zajistit, aby nikdy nebyly přiděleny vašemu kódu. A to i v případě, pokud jejich poskytnutí umožňují zásady zabezpečení. |
Proveďte některý z výše uvedených požadavků u vestavěné množiny oprávnění (Requesting Built-in Permission Sets). |
Vestavěné množiny oprávnění zahrnují Nothing, Execution, FullTrust,Internet, LocalIntranet a SkipVerification. |
Proveďte některý z výše uvedených požadavků u množin oprávnění zakódovaných pomocí XML (Requesting XML-Encoded Permissions). |
XML reprezentace (řetězec obsahující množinu oprávnění zakódovanou pomocí XML nebo umístění XML souboru obsahujícího množinu zakódovaných oprávnění) požadované množiny oprávnění. |
Pokud specifikujete požadovaná oprávnění (s použitím RequestMinimum), kódu bude uděleno každé požadováné oprávnění, které umožní zásady zabezpečení. Kódu bude povoleno spuštění pouze v případě, jsou-li poskytnuta všechna oprávnění, která vyžaduje.
Požadování volitelných oprávnění bez vyžadování požadovaných oprávnění může v některých případech vážně omezit oprávnění, která jsou udělena sestavení. Například předpokládejme, že zásady zabezpečení obvykle udělují sestavení A oprávnění spojené s množinou oprávnění pojmenovanou Everything. Pokud vývojář sestavení A požaduje oprávnění A jako volitelné a nepožaduje žádná požadovaná oprávnění, tak sestavení A bude mít udělena buď oprávnění A (pokud to zásady zabezpečení umožňují) nebo vůbec žádná oprávnění.
Viz také
Úkoly
Postupy: Žádost o oprávnění pro pojmenovanou sadu oprávnění
Odkaz
SecurityAction.RequestOptional
Koncepty
Základy zabezpečení přístupu kódu