ドメインの境界を越えてサービスを利用できるようにする

複数ドメイン間の通信に を使用するには、Web アプリケーションの悪用に利用されるいくつかのセキュリティ脆弱性に対する保護が必要です。複数のサイトにまたがる偽造は、ドメイン間呼び出しを許可した場合に脅威になるクラスの悪用です。この悪用では、ユーザーに気付かれることなく無許可のコマンドをサードパーティ サービスに送信する、悪意のある Silverlight コントロールが使用されます。サイト間要求の偽造を防ぐには、既定で Silverlight がイメージとメディアを除くすべての要求に対して元のサイトのみの通信を許可するようにします。たとえば、https://contoso.com/mycontrol.aspx でホストされている Silverlight コントロールは、既定では、同じドメイン上のサービスのみにアクセスできます。たとえば、https://contoso.com/service.svc にはアクセスできますが、https://fabrikam.com/service.svc のサービスにはアクセスできません。これにより、https://contoso.com ドメインにホストされている悪意のある Silverlight コントロールが、https://fabrikam.com ドメインにホストされているサービス上で承認されていない操作を呼び出すのを防ぐことができます。

Silverlight コントロールから別のドメインのサービスにアクセスできるようにするには、サービスでドメイン間アクセスの許可を明示的にオプトインする必要があります。オプトインによって、格納するデータの重要性を損なうおそれなしに、公開する操作を Silverlight コントロールから安全に呼び出せることがサービスによって明確に提示されます。

Silverlight 3 では、サービスで複数ドメイン間アクセスへのオプトインに使用されるメカニズムが 2 つサポートされています。

  • サービスがホストされるドメインのルートに clientaccesspolicy.xml ファイルを配置して、複数ドメイン間アクセスを許可するようにサービスを構成します。

  • サービスがホストされるドメインのルートに有効な crossdomain.xml ファイルを配置します。このファイルでは、ドメイン全体をパブリックに指定する必要があります。Silverlight では、crossdomain.xml スキーマのサブセットがサポートされます。

スキーマ間アクセスの詳細については、「ネットワーク セキュリティのアクセス制限 (Silverlight 2)」を参照してください。

clientaccesspolicy.xml ファイルを使用して複数ドメイン間のアクセスを許可するには

  1. Silverlight クライアントによるアクセスを可能にするサービスを構築します。この方法の詳細については 、「方法 : Silverlight クライアントのサービスを構築する」を参照してください。

  2. サービスへのアクセスを許可する clientaccesspolicy.xml ファイルを作成します。次の構成により、現在のドメインのすべてのリソースに対するその他のすべてのドメインからのアクセスが許可されます。

    <?xml version="1.0" encoding="utf-8"?>
    <access-policy>
      <cross-domain-access>
        <policy>
          <allow-from http-request-headers="SOAPAction">
            <domain uri="*"/>
          </allow-from>
          <grant-to>
            <resource path="/" include-subpaths="true"/>
          </grant-to>
        </policy>
      </cross-domain-access>
    </access-policy>
    
  3. サービスがホストされるドメインのルートに clientaccesspolicy.xml ファイルを保存します。たとえば、サービスが https://fabrikam.com でホストされる場合は、https://fabrikam.com/clientaccesspolicy.xml に配置する必要があります。

  4. ヘッダー属性の有効値はワイルドカード ("*") で、これによってブラックリストに載っていないすべてのヘッダー、および許容されるヘッダーのコンマ区切りリストが許可されます。これらの許可対象のヘッダーでは、"X-CUSTOM-*" のようなワイルドカードのサフィックスを使用できます。

  5. また、https://contoso.com などの特定の他ドメインについてのみアクセスを許可する場合は、clientaccesspolicy.xml に次の構成を組み込む必要があります。

    <?xml version="1.0" encoding="utf-8"?>
    <access-policy>
      <cross-domain-access>
        <policy>
          <allow-from http-request-headers="SOAPAction ">
            <domain uri="https://contoso.com"/>
          </allow-from>
          <grant-to>
            <resource path="/" include-subpaths="true"/>
          </grant-to>
        </policy>
      </cross-domain-access>
    </access-policy>
    
  6. 他のドメインからサービスを呼び出して、アクセスの有効性をテストします。

  7. Dd470115.note(ja-jp,VS.95).gifメモ :
    HTTP アプリケーションからの HTTPS サービスへのアクセスを許可するには、<domain uri=”http://*” /> 要素を <allow-from> 要素に含める必要があります。

crossdomain.xml ファイルを使用して複数ドメイン間のアクセスを許可するには

  1. Silverlight クライアントによるアクセスを可能にするサービスを構築します。この方法の詳細については 、「方法 : Silverlight クライアントのサービスを構築する」を参照してください。

  2. 次の構成が組み込まれた crossdomain.xml ファイルを作成します。このファイルは、他のすべてのドメインからサービスへのアクセスを許可するように構成する必要があります。このように構成しないと、Silverlight 3 で認識されません。

    <?xml version="1.0"?>
    <!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
    <cross-domain-policy>
      <allow-http-request-headers-from domain="*" headers="SOAPAction,Content-Type"/>
    </cross-domain-policy>
    
  3. crossdomain.xml ファイルを、サービスがホストされるドメインのルートに保存します。たとえば、サービスが https://fabrikam.com でホストされる場合は、https://fabrikam.com/crossdomain.xml に配置する必要があります。

  4. 他のドメインからサービスを呼び出して、サービスの有効性をテストします。

このトピックに関するコメントを Microsoft に送信する。

Copyright© 2009 by Microsoft Corporation. All rights reserved.