System.Xml.XmlSecureResolver クラス

この記事は、この API のリファレンス ドキュメントの補足説明です。

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

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

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

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

重要

XmlSecureResolver オブジェクトはユーザー資格情報など、重要な情報を含むことがあります。 XmlSecureResolver オブジェクトをキャッシュするときは注意が必要であり、XmlSecureResolver オブジェクトを信頼できないコンポーネントに渡さないようにする必要があります。

重要

.NET の共通言語ランタイム (CLR) で実行されるコードと、Microsoft SQL Server 2005 内に統合された CLR で実行されるコードでは、セキュリティ インフラストラクチャに違いがあります。 これにより、.NET CLR 用に開発されたコードを SQL Server に統合された CLR で使うと、動作が異なる場合があります。 これらの違いの 1 つは、URL に基づく証拠がある場合 (つまり、CreateEvidenceForUrl(String) メソッドまたは XmlSecureResolver コンストラクターを使う場合) に、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. XmlReader オブジェクトを作成するときに、XmlReaderSettings オブジェクトを Create メソッドに渡します。

    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 はリソースを開く前に、作成された PermitOnlyPermissionSet 呼び出します。

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

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

    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)