Sdílet prostřednictvím


Kód transparentní pro zabezpečení

Zabezpečení zahrnuje tři vzájemně komunikující části: sandboxing, oprávnění a prosazování. Sandboxing odkazuje na praxi vytváření izolovaných domén, kde je nějaký kód považován za plně důvěryhodný a jiný kód je omezen oprávněními v sadě udělené izolovanému prostoru. Kód aplikace, který běží v rámci udělené sady izolovaného prostoru je považován za transparentní; to znamená, že nemůže provádět žádné operace, které můžou ovlivnit zabezpečení. Udělená sada pro izolovaný prostor je určena legitimací. Legitimace identifikuje jaká zvláštní oprávnění jsou vyžadována izolovanými prostory a jaké druhy izolovaných prostorů mohou být vytvořeny. Vynucení odkazuje na umožnění transparentnímu kódu vykonávat pouze v rámci jeho udělené sady.

Důležitá poznámkaDůležité

Zásady zabezpečení byly klíčovým elementem v předchozích verzích rozhraní .NET Framework.Počínaje rozhraním .NET Framework verze 4 jsou zásady zabezpečení zastaralé. Odstranění zásad zabezpečení je oddělené od transparentnosti zabezpečení.Informace o účincích této změny a rady ohledně migrace naleznete v tématu Kompatibilita a migrace zásad zabezpečení přístupu kódu.

Toto téma podrobněji popisuje model transparentnosti. Obsahuje následující části:

  • Účel modelu transparentnosti

  • Specifikování úrovně transparentnosti

  • Vynucení transparentnosti

Účel modelu transparentnosti

Transparentnost je mechanismus vynucování, který odděluje kód, který běží jako část aplikace od kódu, který běží jako část infrastruktury. Transparentnost kreslí bariéru mezi kódem, který může dělat privilegované věci (kritický kód), jako je například volání nativního kódu a kódem, který tyto věci dělat nemůže (transparentní kód). Transparentní kód může provádět příkazy uvnitř omezení sady oprávnění, uvnitř které funguje, ale nemůže spouštět, odvozovat nebo obsahovat kritický kód.

Primární cíl vynucování transparentnosti je poskytnout jednoduchý a účinný mechanismus pro izolaci různých skupin kódu založený na oprávnění. V rámci kontextu modelu izolování prostoru (sandboxing) jsou tyto skupiny oprávnění buď plně důvěryhodné (to znamená, nejsou omezeny) nebo částečně důvěryhodné (tedy omezeny sadou oprávnění udělenou izolovanému prostoru).

Důležitá poznámkaDůležité

Model transparentnosti přesahuje zabezpečení přístupu kódu.Transparentnost je vynucena kompilátorem za běhu a zůstává v platnosti bez ohledu na udělenou sadu pro sestavení, včetně úplné důvěryhodnosti.

Transparentnost byla představena v rozhraní .NET Framework verze 2.0, aby zjednodušila model zabezpečení a usnadnila psaní a nasazení zabezpečených knihoven a aplikací. Transparentní kód se také používá u technologie Microsoft Silverlight pro zjednodušení vývoje částečně důvěryhodných aplikací.

PoznámkaPoznámka

Když vyvíjíte částečně důvěryhodnou aplikaci, musíte znát požadavky oprávnění na vaše cílové hostitele.Můžete vyvíjet aplikace využívající prostředky, které nejsou povoleny některými hostiteli.Tato aplikace bude zkompilována bez chyby, ale selže, když bude načtena do hostovaného prostředí.Pokud jste vytvořili aplikaci pomocí sady Visual Studio, můžete povolit ladění v částečném vztahu důvěryhodnosti nebo z vývojového prostředí omezené sadě oprávnění.Další informace naleznete v tématu Postupy: Ladění aplikace ClickOnce s omezenými oprávněními.Vlastnost Calculate Permissions poskytnutá k aplikaci ClickOnce je také k dispozici pro libovolnou částečně důvěryhodnou aplikaci.

Zpět na začátek

Specifikování úrovně transparentnosti

Atribut úrovně sestavení SecurityRulesAttribute explicitně vybere pravidla SecurityRuleSet, která bude sestavení dodržovat. Pravidla jsou uspořádány podle číselné úrovně systému, kde vyšší úrovně znamenají těsnější prosazování pravidel zabezpečení.

Existují tyto úrovně:

  • Druhá úroveň (Level2) – pravidla transparentnosti rozhraní .NET Framework 4.

  • První úroveň (Level1) – pravidla transparentnosti rozhraní .NET Framework 2.0.

Základní rozdíl mezi těmito dvěma úrovněmi transparentnosti je, že první úroveň nevynucuje pravidla transparentnosti pro volání pocházející mimo sestavení a je určena pouze pro kompatibilitu.

Důležitá poznámkaDůležité

Měli byste specifikovat transparentnost první úrovně pouze pro kompatibilitu; to znamená, specifikovat první úroveň pouze pro kód, který byl vyvinut v rozhraní .NET Framework 3.5 nebo starším, které používá atribut AllowPartiallyTrustedCallersAttribute nebo nepoužívá model transparentnosti. Transparentnost první úrovně je například možné použít pro sestavení rozhraní .NET Framework 2.0, která umožňují volání od částečně důvěryhodných volajících (APTCA).Pro kód, který je vyvinutý pro rozhraní .NET Framework 4 vždy použijte transparentnost druhé úrovně.

Transparentnost druhé úrovně

Transparentnost druhé úrovně byla představena v rozhraní .NET Framework verze 4. Tři zásady tohoto modelu jsou transparentní kód, bezpečný a kritický kód pro zabezpečení a kód kritický pro bezpečnost.

  • Transparentní kód bez ohledu na udělená oprávnění (včetně úplné důvěryhodnosti) může volat pouze jiný transparentní kód nebo bezpečný a kritický kód pro zabezpečení. Pokud je kód částečně důvěryhodný, může pouze provádět akce, které jsou povolené sadou oprávnění domény. Transparentní kód nemůže provádět následující:

    • Provádět operaci Assert nebo zvyšovat úroveň oprávnění.

    • Obsahovat nebezpečný nebo neověřitelný kód.

    • Přímo volat kritický kód.

    • Volat nativní kód nebo kód, který má atribut SuppressUnmanagedCodeSecurityAttribute.

    • Volat člen, který je chráněn pomocí LinkDemand.

    • Dědit z kritických typů.

    Kromě toho transparentní metody nemohou přepsat kritické virtuální metody nebo implementovat kritické metody rozhraní.

  • Bezpečný a kritický kód pro zabezpečení je plně důvěryhodný, ale je volatelný transparentním kódem. Zpřístupňuje omezenou oblast povrchu plně důvěryhodného kódu. K ověření správnosti a zabezpečení dochází v kritickém kódu pro zabezpečení.

  • Kritický kód pro zabezpečení může volat libovolný kód a je plně důvěryhodný, ale nemůže být volán transparentním kódem.

Transparentnost první úrovně

Model transparentnosti první úrovně byl představen v rozhraní .NET Framework verze 2.0, aby umožňoval vývojářům snížit objem kódu, který podléhá auditu zabezpečení. Ačkoli transparentnost první úrovně byla veřejně k dispozici ve verzi 2.0, byla primárně používána pouze v rámci společnosti Microsoft pro účely auditování zabezpečení. Prostřednictvím anotací jsou vývojáři schopni deklarovat které typy a členy mohou zvyšovat zabezpečení a provádět jiné důvěryhodné akce (bezpečnostně kritické), a které nemohou (bezpečnostně transparentní). Kód, který je identifikován jako transparentní nevyžaduje vysoký stupeň auditování zabezpečení. První úroveň transparentnosti udává, že vynucení transparentnosti je omezeno v rámci sestavení. Jinými slovy, jakékoliv veřejné typy nebo členy, které jsou identifikovány jako kritické pro zabezpečení jsou kritické pro zabezpečení pouze v rámci sestavení. Pokud chcete vynutit zabezpečení pro tyto typy a členy, když jsou volaní mimo sestavení, musíte použít požadavky propojení pro úplnou důvěryhodnost. Pokud tak neučiníte, veřejně viditelné typy kritické pro zabezpečení jsou zpracovány jako kritické a bezpečné pro zabezpečení a mohou být volány částečně důvěryhodným kódem mimo sestavení.

Transparentnost první úrovně má následující omezení:

  • Typy a členy kritické pro zabezpečení, které jsou veřejné, jsou přístupné z kódu transparentního pro zabezpečení.

  • Anotace transparentnosti jsou vynuceny pouze v rámci sestavení.

  • Typy a členy kritické pro zabezpečení musí používat požadavky propojení k vynucení zabezpečení pro volání z vnějšku sestavení.

  • Pravidla dědičnosti nejsou vynucena.

  • Transparentní kód má potenciál, aby prováděl škodlivé akce při spuštění jako plně důvěryhodný.

Zpět na začátek

Vynucení transparentnosti

Pravidla transparentnosti nejsou vynucena, dokud se transparentnost nevypočítá. V této době je vyvolána výjimka InvalidOperationException, pokud je pravidlo transparentnosti porušeno. Čas ve kterém je transparentnost vypočítána závisí na několika faktorech a nemůže být předpovězen. Je vypočten tak pozdě, jak je to možné. V rozhraní .NET Framework 4, dojde k výpočtu transparentnosti úrovně sestavení dříve, než v rozhraní .NET Framework 2.0. Jediná záruka je, že k výpočtu transparentnosti dojde v době, kdy je to nezbytné. Toto je podobné tomu, jak kompilátor za běhu (JIT) může měnit bod, kdy je metoda kompilována a případné chyby v této metodě jsou odhaleny. Výpočet transparentnosti je neviditelný, pokud váš kód nemá nějaké chyby transparentnosti.

Zpět na začátek

Viz také

Koncepty

Kód transparentní pro zabezpečení, úroveň 1

Transparentní kód pro zabezpečení, úroveň 2