Aspekty zabezpečení XAML
Tento článek popisuje osvědčené postupy zabezpečení v aplikacích při použití rozhraní XAML a .NET XAML Services API.
Nedůvěryhodné XAML v aplikacích
Nedůvěryhodný kód XAML je ve většině případů jakýkoli zdroj XAML, který vaše aplikace nezahrnovala ani nevysílala.
XAML, který je zkompilovaný nebo uložený jako prostředek typu resx
v rámci důvěryhodného a podepsaného sestavení, není ze své podstaty nedůvěryhodný. XAML můžete důvěřovat stejně jako celé sestavení. Ve většiněpřípadůch Volný XAML není konkrétní komponenta nebo funkce aplikačního modelu s infrastrukturou nasazení a balení. Sestavení však může implementovat chování, které zahrnuje načtení volného XAML.
Pro nedůvěryhodný kód XAML byste s ním měli zacházet obecně stejně jako s nedůvěryhodným kódem. Použijte sandboxing nebo jiné metafory, abyste zabránili potenciálně nedůvěryhodnému kódu XAML v přístupu k důvěryhodnému kódu.
Povaha funkcí XAML dává XAML právo vytvářet objekty a nastavovat jejich vlastnosti. Mezi tyto funkce patří také přístup k převaděčům typů, mapování a přístupu k sestavením v doméně aplikace, použití rozšíření značek, x:Code
bloků atd.
Kromě funkcí na úrovni jazyka se XAML používá pro definici uživatelského rozhraní v mnoha technologiích. Načtení nedůvěryhodného KÓDU XAML může znamenat načtení škodlivého uživatelského rozhraní falšování identity.
Sdílení kontextu mezi čtenáři a zapisovači
Architektura služby .NET XAML Services pro čtenáře XAML a zapisovače XAML často vyžaduje sdílení čtečky XAML do zapisovače XAML nebo sdíleného kontextu schématu XAML. Pokud píšete logiku smyčky uzlů XAML nebo poskytujete vlastní cestu k uložení, může být vyžadováno sdílení objektů nebo kontextů. Nesdílejte instance čtečky XAML, nedefaultní kontext schématu XAML ani nastavení pro třídy čtení a zapisovače XAML mezi důvěryhodným a nedůvěryhodným kódem.
Většina scénářů a operací zahrnujících zápis objektů XAML pro backing založený na CLR může použít pouze výchozí kontext schématu XAML. Výchozí kontext schématu XAML explicitně neobsahuje nastavení, která by mohla ohrozit úplný vztah důvěryhodnosti. Proto je bezpečné sdílet kontext mezi důvěryhodnými a nedůvěryhodnými komponentami čtečky a zapisovače XAML. Pokud to ale uděláte, je stále osvědčeným postupem zachovat tyto čtenáře a spisovatele v samostatných AppDomain oborech, přičemž jeden z nich je speciálně určený nebo izolovaný prostor (sandbox) pro částečnou důvěru.
Obory názvů XAML a vztah důvěryhodnosti sestavení
Základní nekvalifikovaná syntaxe a definice toho, jak XAML interpretuje vlastní mapování oboru názvů XAML na sestavení, nerozlišuje mezi důvěryhodným a nedůvěryhodným sestavením načteným do domény aplikace. Proto je technicky možné, aby nedůvěryhodné sestavení zpochybnělo zamýšlené mapování oboru názvů XAML důvěryhodného sestavení a zachytilo deklarované informace o objektu a vlastnosti zdroje XAML. Pokud máte požadavky na zabezpečení, abyste se této situaci vyhnuli, měli byste požadované mapování oboru názvů XAML provést pomocí jedné z následujících technik:
V libovolném mapování oboru názvů XAML vytvořeném xaml použijte plně kvalifikovaný název sestavení se silným názvem.
Omezte mapování sestavení na pevnou sadu referenčních sestavení vytvořením konkrétního XamlSchemaContext pro vaše čtenáře XAML a zapisovače objektů XAML. Viz XamlSchemaContext(IEnumerable<Assembly>).
Mapování typů XAML a přístup k systému typů
XAML podporuje vlastní systém typů, který je mnoha způsoby partnerským vztahem k tomu, jak CLR implementuje základní systém typů CLR. Pro určité aspekty povědomí o typech, kde provádíte rozhodnutí o důvěryhodnosti typu na základě informací o typu, byste měli odložit informace o typu v backingových typech CLR. Důvodem je, že některé z konkrétních možností vytváření sestav systému typů XAML jsou ponechány otevřené jako virtuální metody, a proto nejsou plně pod kontrolou původních implementací .NET XAML Services. Tyto body rozšiřitelnosti existují, protože systém typů XAML je rozšiřitelný, aby odpovídal rozšiřitelnosti samotného XAML a jeho možných strategií mapování typů a výchozího kontextu schématu CLR a výchozího kontextu schématu XAML. Další informace najdete v konkrétních poznámkách k několika vlastnostem XamlType a XamlMember.
Viz také
.NET Desktop feedback