方法 : XmlSecureResolver クラスの使用

XmlSecureResolver クラスは、XmlResolver オブジェクトをラップして元の XmlResolver がアクセスできるリソースを制限することにより、別の XmlResolver オブジェクトを安全に保つ支援をします。 たとえば、XmlSecureResolver クラスは、特定のインターネット サイトやゾーンへのアクセスを禁止できます。

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

  • ローカル イントラネット サイトへのアクセスだけを許可する XmlSecureResolver オブジェクトを作成します。

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

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

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

    Dim myWebPermission As New WebPermission(PermissionState.None)
    
    WebPermission myWebPermission = new WebPermission(PermissionState.None);
    
  2. 次の 2 つの URL へのアクセスだけを許可します。

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

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

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

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

  • Evidence を使用してアクセスを制限できます。 基になる XmlResolver に適用される PermissionSet の作成には、Evidence を使用します。 XmlSecureResolver はリソースを開く前に、作成された PermissionSetPermitOnly 呼び出します。

    以下は、考えられるいくつかのシナリオとそれぞれのシナリオについての証拠の種類の概要です。

    • 完全に信頼されている環境で作業している場合 :

      アセンブリを使用して証拠を作成します。

      Dim myEvidence As Evidence = Me.GetType().Assembly.Evidence
      Dim myResolver As XmlSecureResolver
      myResolver = New XmlSecureResolver(New XmlUrlResolver(), myEvidence)
      
      Evidence myEvidence = this.GetType().Assembly.Evidence;
      XmlSecureResolver myResolver;
      myResolver = new XmlSecureResolver(new XmlUrlResolver(), myEvidence);
      
    • 信頼度の低い環境で作業していて、外部ソースからのコードまたはデータがある。 その外部ソースの出所を知っていて検証可能な URI がある場合 :

      URI を使用して証拠を作成します。

      Dim myEvidence As Evidence = XmlSecureResolver.CreateEvidenceForUrl(sourceURI)
      Dim myResolver As New XmlSecureResolver(New XmlUrlResolver(), myEvidence)
      
      
      Evidence myEvidence = XmlSecureResolver.CreateEvidenceForUrl(sourceURI);
      XmlSecureResolver myResolver = new XmlSecureResolver(new XmlUrlResolver(), myEvidence);
      
    • 信頼度の低い環境で作業していて、外部ソースからのコードまたはデータがあり、その外部ソースの出所を知らない場合 :

      evidence パラメーターを null に設定します。 これは、リソースへのアクセスを禁止します。

      または

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

XmlSecureResolver による XML リソースの解決

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

XmlResolver オブジェクトの使用を指定することによって、これをオーバーライドできます。 XmlSecureResolver を指定することにより、基になる XmlResolver でアクセス可能なリソースを制限できます。

XmlSecureResolver を使用する XmlReader オブジェクトを作成するには

  1. 正しいアクセス許可セットを持つ XmlSecureResolver オブジェクトを作成します。

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

    Dim settings As New XmlReaderSettings()
    settings.XmlResolver = myResolver
    
    XmlReaderSettings settings = new XmlReaderSettings();
    settings.XmlResolver = myResolver;
    
  3. XmlReaderSettings オブジェクトを使用して XmlReader オブジェクトを作成します。

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

XmlSecureResolver を使用して XSLT スタイル シートを読み込むには

  1. 正しいアクセス許可セットを持つ XmlSecureResolver オブジェクトを作成します。

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

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

参照

その他の技術情報

セキュリティと System.Xml アプリケーション

XML ドキュメントと XML データ