次の方法で共有


XSLT のセキュリティに関する考慮事項

XSLT 言語には豊富な機能セットがあり、豊富な能力と柔軟性を提供します。 これには、役に立つ一方で、外部のソースによって悪用される可能性がある多くの機能が含まれています。 XSLT を安全に使用するには、XSLT を使用するときに発生するセキュリティの問題の種類と、これらのリスクを軽減するために使用できる基本的な戦略を理解する必要があります。

XSLT 拡張機能

2 つの一般的な XSLT 拡張機能は、スタイル シートスクリプトと拡張オブジェクトです。 これらの拡張機能を使用すると、XSLT プロセッサでコードを実行できます。

  • 拡張オブジェクトは、XSL 変換にプログラミング機能を追加します。

  • msxsl:script拡張要素を使用して、スタイル シートにスクリプトを埋め込むことができます。

拡張オブジェクト

拡張オブジェクトは、 AddExtensionObject メソッドを使用して追加されます。 拡張機能オブジェクトをサポートするには、FullTrust アクセス許可セットが必要です。 これにより、拡張オブジェクト コードの実行時にアクセス許可の昇格が行われないようにします。 FullTrust 権限がない状態で AddExtensionObject メソッドを呼び出すと、セキュリティ例外が発生します。

スタイル シート スクリプト

スクリプトは、 msxsl:script 拡張要素を使用してスタイル シートに埋め込むことができます。 スクリプトのサポートは、既定で無効になっている XslCompiledTransform クラスのオプション機能です。 スクリプトを有効にするには、 XsltSettings.EnableScript プロパティを true に設定し、 XsltSettings オブジェクトを Load メソッドに渡します。

スクリプト ブロックは、.NET Framework でのみサポートされています。 .NET Core または .NET 5 以降ではサポート されていません

ガイドライン

スタイル シートが信頼できるソースから取得された場合にのみ、スクリプトを有効にします。 スタイル シートのソースを確認できない場合、またはスタイル シートが信頼できるソースから取得されていない場合は、XSLT 設定引数に null を渡します。

外部リソース

XSLT 言語には、プロセッサが URI 参照を解決する必要がある xsl:importxsl:includedocument() 関数などの機能があります。 XmlResolver クラスは、外部リソースを解決するために使用されます。 外部リソースは、次の 2 つの場合に解決する必要がある場合があります。

  • スタイル シートをコンパイルする場合、 XmlResolverxsl:importxsl:include 解決に使用されます。

  • 変換を実行するときに、 XmlResolver を使用して document() 関数を解決します。

    document()関数は、XslCompiledTransform クラスでは既定で無効になっています。 この機能を有効にするには、 XsltSettings.EnableDocumentFunction プロパティを true に設定し、 XsltSettings オブジェクトを Load メソッドに渡します。

LoadメソッドとTransform メソッドには、引数の 1 つとしてXmlResolverを受け入れるオーバーロードが含まれています。 XmlResolverが指定されていない場合は、資格情報のない既定のXmlUrlResolverが使用されます。

ガイドライン

スタイル シートが信頼できるソースから取得された場合にのみ、 document() 関数を有効にします。

次の一覧では、 XmlResolver オブジェクトを指定する場合について説明します。

  • XSLT プロセスが認証を必要とするネットワーク リソースにアクセスする必要がある場合は、必要な資格情報で XmlResolver を使用できます。

  • XSLT プロセスがアクセスできるリソースを制限する場合は、適切なアクセス許可が設定された XmlSecureResolver を使用できます。 制御しないリソースまたは信頼されていないリソースを開く必要がある場合は、 XmlSecureResolver クラスを使用します。

  • 動作をカスタマイズする場合は、独自の XmlResolver クラスを実装し、それを使用してリソースを解決できます。

  • 外部リソースにアクセスできないようにする場合は、null引数にXmlResolverを指定できます。

こちらも参照ください