次の方法で共有


System.Xml.XmlSecureResolver クラス

この記事では、この API のリファレンス ドキュメントに補足的な解説を提供します。

XmlUrlResolver クラスは、System.Xml名前空間内のすべてのクラスの既定のリゾルバーです。 XML ドキュメントの読み込みと、エンティティ、DTD、スキーマなどの外部リソースの解決、ディレクティブのインポートまたはインクルードに使用されます。

この既定値は、使用する XmlResolver オブジェクトを指定することでオーバーライドできます。 たとえば、基になる XmlResolver がアクセスできるリソースを制限する場合は、 XmlSecureResolver オブジェクトを使用できます。

XmlSecureResolver は、 XmlResolver の具体的な実装をラップし、基になる XmlResolver がアクセスできるリソースを制限します。 たとえば、 XmlSecureResolver には、埋め込まれた Uniform Resource Identifier (URI) 参照から発生するクロスドメイン リダイレクトを禁止する機能があります。

XmlSecureResolver オブジェクトを構築するときは、有効なXmlResolver実装と共に、URL、証拠オブジェクトのインスタンス、またはアクセス許可セットを指定します。これは、セキュリティを判断するためにXmlSecureResolverによって使用されます。 System.Security.PermissionSet が生成されるか、既存のものが使用され、基になる PermissionSet.PermitOnly をセキュリティで保護するために XmlResolver が呼び出されます。

Von Bedeutung

XmlSecureResolver オブジェクトには、ユーザー資格情報などの機密情報を含めることができます。 オブジェクト XmlSecureResolver キャッシュする場合は注意が必要です。また、信頼されていないコンポーネントに XmlSecureResolver オブジェクトを渡さないでください。

Von Bedeutung

.NET 共通言語ランタイム (CLR) で実行されるコードと、Microsoft SQL Server 2005 内に統合された CLR で実行されるコードのセキュリティ インフラストラクチャには違いがあります。 これにより、.NET CLR 用に開発されたコードが SQL Server 統合 CLR で使用される場合に動作が異なる場合があります。 これらの違いの 1 つは、URL に基づく証拠がある場合 (つまり、XmlSecureResolver メソッドまたは CreateEvidenceForUrl(String) コンストラクターを使用する場合) に、XmlSecureResolver クラスに影響します。 SQL Server 統合 CLR のポリシー解決メカニズムでは、 Url または Zone 情報は使用されません。 代わりに、アセンブリの読み込み時にサーバーによって追加される GUID に基づいてアクセス許可が付与されます。 SQL Server 統合 CLR で XmlSecureResolver を使用する場合は、指定した PermissionSetを使用して、必要な証拠を直接指定します。

セキュリティで保護されたリゾルバーを使用するには

  1. 適切なアクセス許可が設定された XmlSecureResolver を作成します。

  2. XmlReaderSettings オブジェクトを作成し、XmlSecureResolver オブジェクトを使用します。

    XmlReaderSettings settings = new XmlReaderSettings();
    settings.XmlResolver = myResolver;
    
    Dim settings As New XmlReaderSettings()
    settings.XmlResolver = myResolver
    
  3. XmlReaderSettings オブジェクトを作成するときに、Create オブジェクトを XmlReader メソッドに渡します。

    XmlReader reader = XmlReader.Create("books.xml", settings);
    
    Dim reader As XmlReader = XmlReader.Create("books.xml", settings)
    

URL を使用してアクセスを制限するには

XmlSecureResolver(XmlResolver, String) コンストラクターを使用して、ローカル イントラネット サイトにのみアクセスできるXmlSecureResolver オブジェクトを作成します。

XmlSecureResolver myResolver = new XmlSecureResolver(new XmlUrlResolver(), "http://myLocalSite/");
Dim myResolver As New XmlSecureResolver(New XmlUrlResolver(), "http://myLocalSite/")

アクセス許可セットを使用してアクセスを制限するには

  1. WebPermission オブジェクトを作成します。

    WebPermission myWebPermission = new WebPermission(PermissionState.None);
    
    Dim myWebPermission As New WebPermission(PermissionState.None)
    
  2. アクセスを許可する URL を指定します。

    myWebPermission.AddPermission(NetworkAccess.Connect, "http://www.contoso.com/");
    myWebPermission.AddPermission(NetworkAccess.Connect, "http://litwareinc.com/data/");
    
    myWebPermission.AddPermission(NetworkAccess.Connect, "http://www.contoso.com/")
    myWebPermission.AddPermission(NetworkAccess.Connect, "http://litwareinc.com/data/")
    
  3. PermissionSet オブジェクトに Web アクセス許可を追加します。

    PermissionSet myPermissions = new PermissionSet(PermissionState.None);
    myPermissions.AddPermission(myWebPermission);
    
    Dim myPermissions As New PermissionSet(PermissionState.None)
    myPermissions.AddPermission(myWebPermission)
    
  4. XmlSecureResolver(XmlResolver, PermissionSet) コンストラクターを使用して、アクセス許可セットを使用してXmlSecureResolver オブジェクトを作成します。

    XmlSecureResolver myResolver = new XmlSecureResolver(new XmlUrlResolver(), myPermissions);
    
    Dim myResolver As New XmlSecureResolver(New XmlUrlResolver(), myPermissions)
    

    別の例については、 XmlSecureResolver リファレンス ページを参照してください。

証拠を使用してアクセスを制限するには

アクセスを制限するには、 XmlSecureResolver(XmlResolver, Evidence) コンストラクターを使用し、 Evidenceを指定します。 Evidenceは、基になるPermissionSetに適用されるXmlResolverを作成するために使用されます。 XmlSecureResolverは、リソースを開く前に、作成されたPermitOnlyに対してPermissionSetを呼び出します。

一般的なシナリオと、それぞれに提供する証拠の種類を次に示します。

  • 完全に信頼できる環境で作業している場合は、アセンブリを使用して証拠を作成します。

    Evidence myEvidence = this.GetType().Assembly.Evidence;
    XmlSecureResolver myResolver;
    myResolver = new XmlSecureResolver(new XmlUrlResolver(), myEvidence);
    
    Dim myEvidence As Evidence = Me.GetType().Assembly.Evidence
    Dim myResolver As XmlSecureResolver
    myResolver = New XmlSecureResolver(New XmlUrlResolver(), myEvidence)
    
  • 半信頼環境で作業している場合、外部ソースからのコードまたはデータがあり、外部ソースの発信元がわかっていて、検証可能な URI がある場合は、URI を使用して証拠を作成します。

    
    Evidence myEvidence = XmlSecureResolver.CreateEvidenceForUrl(sourceURI);
    XmlSecureResolver myResolver = new XmlSecureResolver(new XmlUrlResolver(), myEvidence);
    
    Dim myEvidence As Evidence = XmlSecureResolver.CreateEvidenceForUrl(sourceURI)
    Dim myResolver As New XmlSecureResolver(New XmlUrlResolver(), myEvidence)
    
  • 半信頼環境で作業していて、外部ソースからのコードまたはデータがあるが、外部ソースの原点がわからない場合は、次のいずれかを行います。

    evidence パラメーターを null に設定します。 これにより、リソースにアクセスできなくなります。

    -又は-

    アプリケーションでリソースへのアクセスが必要な場合は、呼び出し元に証拠を要求します。

セキュリティで保護されたリゾルバーを使用して XSLT スタイル シートを読み込むには

  1. 適切なアクセス許可が設定された XmlSecureResolver を作成します。

  2. XmlSecureResolverLoad メソッドに渡します。

    XslCompiledTransform xslt = new XslCompiledTransform();
    xslt.Load("http://serverName/data/xsl/sort.xsl", null, myResolver);
    
    Dim xslt As New XslCompiledTransform()
    xslt.Load("http://serverName/data/xsl/sort.xsl", Nothing, myResolver)