Aspekty zabezpečení XSLT
Jazyk XSLT má bohatou sadu funkcí, které vám poskytují velký výkon a flexibilitu. Obsahuje mnoho funkcí, které mohou být i mimo zdroje zneužité. Abyste mohli XSLT bezpečně používat, musíte porozumět typům problémů se zabezpečením, ke kterým dochází při použití XSLT, a základní strategie, které můžete použít ke zmírnění těchto rizik.
Rozšíření XSLT
Dvě oblíbená rozšíření XSLT jsou skriptování šablon stylů a objekty rozšíření. Tato rozšíření umožňují procesoru XSLT spouštět kód.
Rozšiřující objekty přidávají programovací schopnosti do transformací XSL.
Skripty lze vložit do šablony stylů pomocí elementu
msxsl:script
rozšíření.
Objekty rozšíření
Rozšiřující objekty jsou přidány pomocí AddExtensionObject metody. Sada oprávnění FullTrust je vyžadována pro podporu objektů rozšíření. Tím se zajistí, že při spuštění kódu objektu rozšíření nedojde ke zvýšení oprávnění. Při pokusu o AddExtensionObject volání metody bez oprávnění FullTrust dojde k vyvolání výjimky zabezpečení.
Skripty šablon stylů
Skripty lze vložit do šablony stylů pomocí elementu msxsl:script
rozšíření. Podpora skriptů je volitelná funkce třídy XslCompiledTransform , která je ve výchozím nastavení zakázaná. Skriptování lze povolit nastavením XsltSettings.EnableScript vlastnosti na true
a předáním XsltSettings objektu metodě Load .
Poznámka:
Bloky skriptů jsou podporovány pouze v rozhraní .NET Framework. Nejsou podporovány v .NET Core nebo .NET 5 nebo novější.
Pokyny
Povolte skriptování pouze v případech, kdy šablona stylů pochází z důvěryhodného zdroje. Pokud nemůžete ověřit zdroj šablony stylů nebo pokud šablona stylů nepochází null
z důvěryhodného zdroje, předejte argument nastavení XSLT.
Externí zdroje
Jazyk XSLT má funkce, jako xsl:import
je , xsl:include
nebo document()
funkce, kde procesor potřebuje přeložit odkazy na identifikátor URI. Třída XmlResolver se používá k překladu externích prostředků. Externí prostředky může být potřeba vyřešit v následujících dvou případech:
Při kompilaci šablony XmlResolver stylů se používá pro
xsl:import
axsl:include
rozlišení.Při provádění transformace XmlResolver se použije k vyřešení
document()
funkce.Poznámka:
Funkce
document()
je ve výchozím nastavení ve třídě zakázaná XslCompiledTransform . Tuto funkci lze povolit nastavením XsltSettings.EnableDocumentFunction vlastnosti natrue
a předáním XsltSettings objektu metodě Load .
Transform Každý Load z nich zahrnuje přetížení, která přijímají XmlResolver jako jeden z jejích argumentů. XmlResolver Pokud není zadaný, použije se výchozí XmlUrlResolver hodnota bez přihlašovacích údajů.
Pokyny
document()
Povolte funkci pouze v případech, kdy šablona stylů pochází z důvěryhodného zdroje.
Následující seznam popisuje, kdy chcete zadat XmlResolver objekt:
Pokud proces XSLT potřebuje přístup k síťovému prostředku, který vyžaduje ověření, můžete použít XmlResolver s potřebnými přihlašovacími údaji.
Pokud chcete omezit prostředky, ke kterým má proces XSLT přístup, můžete použít XmlSecureResolver správnou sadu oprávnění. XmlSecureResolver Třídu použijte, pokud potřebujete otevřít prostředek, který neřídíte nebo který není důvěryhodný.
Pokud chcete přizpůsobit chování, můžete implementovat vlastní XmlResolver třídu a použít ji k řešení prostředků.
Pokud chcete zajistit, aby se k argumentu nepřistupovaly žádné externí prostředky, můžete pro XmlResolver tento argument zadat
null
.