
この文献はクロスドメインポリシーファイルの構造と使用法を示すリファレンスです。これらの情報は、デベロッパーおよびコンテンツプロバイダが自らの管理下にあるアプリケーションやサーバにおいて、ポリシーファイルに定められた規則を遵守するために使用できます。
クロスドメインポリシーファイルは、Webクライアント(Adobe Flash Playerなど)に、複数のドメイン間でのデータ処理に関する許可を付与することができる、XML形式の文書です。クライアントが、ある特定のソースドメインからコンテンツを受け取り、このコンテンツが他のドメインにリクエストを送るような場合、クライアントが適切に処理を行うには、リモートドメインにソースドメインからのアクセスを許可するクロスドメインポリシーファイルが配置されている必要があります。 ポリシーファイルでは、データの読み取りアクセスに対して許可を付与できるだけでなく、クライアントからのクロスドメインリクエストにカスタムヘッダを含めることの許可も付与することができます。
また、ポリシーファイルはソケットでの使用にも対応でき、ソケットベースの接続に許可を付与することもできます。ソケット接続で使用する場合、ポリシーファイルは同一ドメインでの接続と、ドメイン間での接続の両方で使用することができます。
サーバ上にポリシーファイルを配置する際には、ファイル名をcrossdomain.xmlにし、このファイルをドメインのルートディレクトリに配置するのが最も一般的です(例: http://example.com/crossdomain.xml)。ポリシーファイルが必要とされる場面では、クライアントはこの位置をデフォルトで参照します。なお、この体裁で保存されるポリシーファイルのことを、マスターポリシーファイルと呼びます。次に示すのは、制限が緩いURL(つまり、非ソケット向けの)マスターポリシーファイルの典型例です。
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <site-control permitted-cross-domain-policies="master-only"/> <allow-access-from domain="*"/> <allow-http-request-headers-from domain="*" headers="SOAPAction"/> </cross-domain-policy>
ここではsite-control要素によって、本マスターポリシーファイルのみが、このドメインで有効なものであると判断されるべきことが規定されています。直後のallow-access-from要素では、他のいかなるドメインから供給されたコンテンツでも、 現在のドメイン(つまり、このポリシーファイルが保存されたドメイン)上に存在する、あらゆるデータにアクセスできることが規定されています。そして、最後のallow-http-request-headers-from要素では、このドメインに向けたリクエストとともにSOAPActionヘッダの送信を許可することが規定されています。
ドキュメントの構造を記述したものがスキーマです。クロスドメインポリシーファイルのスキーマは、DTD (Document Type Definition) または XSD (XML Schema Definition) で提供されています。以下に、このDTDを示します。
<?xml version="1.0" encoding="ISO-8859-1"?> <!-- Adobe DTD for cross-domain policy files --> <!-- Copyright (c) 2008, Adobe Systems Inc. --> <!ELEMENT cross-domain-policy (site-control?,allow-access-from*,allow-http-request-headers-from*)> <!ELEMENT site-control EMPTY> <!ATTLIST site-control permitted-cross-domain-policies (none|master-only|by-content-type|by-ftp-filename|all) "none" #REQUIRED> <!ELEMENT allow-access-from EMPTY> <!ATTLIST allow-access-from domain CDATA #REQUIRED> <!ATTLIST allow-access-from to-ports CDATA #IMPLIED> <!ATTLIST allow-access-from secure (true|false) "true"> <!ELEMENT allow-http-request-headers-from EMPTY> <!ATTLIST allow-http-request-headers-from domain CDATA #REQUIRED> <!ATTLIST allow-http-request-headers-from headers CDATA #REQUIRED> <!ATTLIST allow-http-request-headers-from secure (true|false) "true"> <!-- End of file. -->
XSDは、汎用的なポリシーファイルスキーマの定義用と、種類別のポリシーファイル(HTTP、HTTPS、FTPおよびSocket)用のものが提供されています。これは、どの環境で用いられるかによって、ポリシーファイルに若干の違いがあるからです。ポリシーファイルの種類別に用意されているすべてのスキーマを表1に示します。
表1. ポリシーファイルのスキーマ
クロスドメインポリシーファイルは4つのXML要素、cross-domain-policy、site-control、allow-access-fromおよびallow-http-request-headers-fromから構成されています。 ポリシーファイルドキュメントのルートノードがcross-domain-policy要素、そしてそれ以外の要素は子要素にあたります。各要素の詳細は、この節に詳しく解説されています。
cross-domain-policy要素はクロスドメインポリシーファイルのルート要素です。ポリシーファイル定義のコンテナとして機能するこの要素自体には、クロスドメインポリシーの詳細を定義する属性は含まれていません。
属性:
親要素:
cross-domain-policyがルートノード)子要素:
サンプル:
以下に示すのは、マスターポリシーファイルの定義として最も制限が厳しいものです。このメタポリシーの場合、当該ポリシーファイルを含むすべてのポリシーファイルによる、あらゆる種類・ドメインへの権限付与が制限されます。
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <site-control permitted-cross-domain-policies="none"/> </cross-domain-policy>
一方、以下に示すのは、マスターポリシーファイルの定義として最も制限が緩やかなものです(使用を避けることを強く推奨します)。ここでは、当該ドメインのサーバ上に定義されたあらゆるポリシーファイルが、あらゆる許可を付与したり、サーバ上のあらゆるファイルへのアクセスと当該サーバへのあらゆるヘッダの送信を許可することができます。しかも、これらの操作はすべて、ソースがHTTPであっても、HTTPSで処理することが許可されています。
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <site-control permitted-cross-domain-policies="all"/> <allow-access-from domain="*" secure="false"/> <allow-http-request-headers-from domain="*" headers="*" secure="false"/> </cross-domain-policy>
次に示すポリシーファイルは、ソケット接続を経由してクライアントに供給されるソケットベースのポリシーの例です。このポリシーでは、 example.comドメイン(およびそのサブドメイン)からポート1100、1200および1212へのソケット接続が許可されます。
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-access-from domain="*.example.com" to-ports="1100,1200,1212"/> </cross-domain-policy>
[マスターポリシーファイルのみ] site-control要素では現在のドメインのメタポリシーが定義できます。メタポリシーは、クライアントがドメインのマスターポリシーファイル(crossdomain.xmlの名でドメインルートに配置されたポリシーファイル)以外のポリシーファイルを使用しなければならない場面で、ドメイン上のどのポリシーファイルの使用を許可するかを決定します。site-control要素はマスターポリシーファイルでのみ有効な要素であるため、それ以外のポリシーファイルでsite-controlを使用しても、この要素は無視されます。
クライアントがマスターポリシーファイル以外の位置にあるポリシーファイルの使用を指示された場合、当該クライアントは、まずマスターポリシーファイルのメタポリシーを参照し、所定のポリシーファイルの使用が許可されていることを確認する必要があります(図1参照)。
図1. メタポリシーを確認するためにマスターポリシーファイルを参照
(拡大表示するには画像をクリック)
属性:
none:マスターポリシーファイル自身を含め、サーバ上のいかなる位置であってもポリシーファイルを一切許可しないmaster-only:このマスターポリシーファイルのみ許可by-content-type:[HTTP/HTTPSのみ] Content-Type: text/x-cross-domain-policyで供給されるポリシーファイルのみ許可by-ftp-filename:[FTPのみ] ファイル名がcrossdomain.xmlのポリシーファイル(つまり、URLの末尾が /crossdomain.xmlであるもの)のみ許可all:当該ドメイン上のすべてのポリシーファイルを許可allであることを除き、すべてmaster-onlyに設定されます。親要素:
子要素:
サンプル:
次に示すポリシーファイルは、それ自体、当該ドメインでのデータアクセスを許可はしないものの、このドメイン上の他のポリシーファイルに、アクセスがどのように処理されるかの判断を許可するメタポリシーが定義されています。したがって、このドメインの権限に関しては、クライアントはマスター以外のポリシーファイルを読み込む必要があります。
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <site-control permitted-cross-domain-policies="all"/> </cross-domain-policy>
次の例では、このマスターポリシーファイルのみを当該ドメインの有効なポリシーとして機能させることを指示する、メタポリシーが定義されています。また、 example.com とそのすべてのサブドメインによるデータアクセスが許可されています。
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <site-control permitted-cross-domain-policies="master-only"/> <allow-access-from domain="*.example.com"/> </cross-domain-policy>
allow-access-from要素では、他のドメインからのアクセスに対して、当該ドメインのデータの読み取りを許可するかどうかが指定できます。許可を与えるドメインごとに、新たなallow-access-from要素を記述する必要があります。ただし、allow-access-from要素内でワイルドカード(*)を記述し、1つの要素で複数のドメインからのアクセスを許可することも可能です。
クライアントによっては、クロスドメインデータのデータ形式に基づいてデータの処理動作が変化するものがあります。 テキストおよびその他の非ビジュアルなデータに関しては、クライアントがリモートドメインからデータを読み込めるかについて、ポリシーファイルを利用して規定することができます(図2参照)。
図2. データの読み込み処理に必要なポリシーファイル
(拡大表示するには画像をクリック)
一方、一部のデータ(画像やその他のビジュアルデータ)は、ソースコンテンツに当該データ固有の情報が決して達し得ない場合に限り、ポリシーファイルの許可なしでもリモートドメインから読み込めることがあります。仮に、当該コンテンツがリモートデータについての情報をリクエストした場合、この操作を認めるかについてはポリシーファイルが確認されます。
図3. データのアクセス時に必要なポリシーファイル
(拡大表示するには画像をクリック)
属性:
*)を使用することができ、ワイルドカードを単独で使用した場合はすべてのドメインが対象になり、ワイルドカードをピリオド(.)で区切られた、第2レベルの明示的なドメイン名の前に接頭辞として使用する場合は、複数のドメイン(サブドメイン)を対象にできます。個別のドメインに対して、それぞれ明示的かつ単独のallow-access-from要素が必要となります。これについて詳しくは、付録A:ドメインの照合の節を参照してください。-)を記述します。ポート範囲は、個別のポート番号とカンマで区切って記述することも可能です。すべてのポートに許可を与えたい場合は、単一のワイルドカード(*)を使用することができます。falseに設定した場合、HTTPSポリシーファイルが、HTTPのソースから送られたリクエストに対しても許可を与えられるようになります。 URLポリシーファイルのデフォルトはtrueに設定されており、HTTPSソースに対する許可のみが与えられます。 falseを使用することは推奨されません。ソケットポリシーファイルにはデフォルトでfalseが設定されます。親要素:
子要素:
メモ:allow-access-from要素をマスターポリシーファイル以外に含めた場合は、対象ディレクトリおよびそのサブディレクトリに配置されたデータにのみ、他のドメインからのアクセスを許可することができます。対象ディレクトリより上のレベルにあるディレクトリへのアクセスは許可できません。
サンプル:
次に示すポリシーファイルは、allow-access-fromを使用する上で最も制限が緩い例を示すものです。このポリシーの場合、すべての他のドメインからの、対象ドメイン上のファイルへのアクセスが許可されます。これは、たとえHTTPのソースがHTTPS経由でドメイン上のデータにアクセスする場合にも適用されます。
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-access-from domain="*" secure="false"/> </cross-domain-policy>
次のポリシーファイルは example.com からのアクセスを許可するためのものです。ここではルートドメインを指定するにあたり、サブドメインの www を含めないケースと含めるケースの両方の記述例が含まれています。
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-access-from domain="example.com"/> <allow-access-from domain="www.example.com"/> </cross-domain-policy>
次に示すのはソケットポリシーファイルの例です。このXMLは、policy-file-requestによるリクエストの発生時に、クライアントへソケット接続経由で提供されるべきものです。このポリシーファイルでは example.com またはそのサブドメインのコンテンツが、ポート507および516以上523以下経由でアクセスすることが許可されます。
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-access-from domain="*.example.com" to-ports="507,516-523"/> </cross-domain-policy>
allow-http-request-headers-from要素では、他のドメインからのコンテンツをホスティングするクライアントが、対象ドメインに対してユーザ定義のヘッダを送信することが許可できます(図4参照)。allow-access-from要素が対象ドメインからのプル型データ配信を許可する一方、このタグでは(ヘッダを利用することによって)データのプッシュ配信を許可することができます。
図4. ヘッダの送信時に必要なポリシーファイル
(拡大表示するには画像をクリック)
属性:
*)を使用することができ、ワイルドカードを単独で使用した場合はすべてのドメインが対象になり、ワイルドカードをピリオド(.)で区切られた、第2レベルの明示的なドメイン名の前に接頭辞として使用する場合は、複数のドメイン(サブドメイン)を対象にできます。個別のドメインに対して、それぞれ明示的かつ単独のallow-access-from要素が必要となります。これについて詳しくは、付録A:ドメインの照合の節を参照してください。*)を使用することもでき、この場合はあらゆるヘッダの送信が許可されます。また、ヘッダの接頭辞を指定することで、所定の接頭辞文字から始まり、他の文字で終了するヘッダの送信を許可することも可能です。falseに設定した場合、HTTPSポリシーファイルが、HTTPのソースから送られたリクエストに許可を与えられるようになります。デフォルト設定はHTTPSソースのみに許可を与えるtrueです。falseを使用することは推奨されません。親要素:
子要素:
メモ: allow-http-request-headers-from要素をマスターポリシーファイル以外に記述した場合は、 当該ポリシーファイルが定義されたディレクトリおよびそのサブディレクトリにあるページに対してのみ、所定のヘッダの送信を許可することができます。
サンプル:
次の例では、あらゆるドメインによる、対象ドメインへのSOAPActionヘッダの送信が許可されます。
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-http-request-headers-from domain="*" headers="SOAPAction"/> </cross-domain-policy>
次のポリシーファイルでは、「Authorization」ヘッダと「X-Foo」の文字列で始まるヘッダで、しかも www.example.com から送られるものが、対象ドメインで許可されます。この例の場合、リクエストが foo.example.comから送られるのであれば、「X-Foo」で始まるヘッダのみが許可され、「Authorization」ヘッダの送信は許可されません。
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> <cross-domain-policy> <allow-http-request-headers-from domain="www.example.com" headers="Authorization,X-Foo*"/> <allow-http-request-headers-from domain="foo.example.com" headers="X-Foo*"/> </cross-domain-policy>
policy-file-request要素は、ポリシーファイルドキュメントで使用するものではなく、クライアントがソケットサーバからポリシーファイル情報をリクエストする際に用いられる、単一ノードで構成されたXMLドキュメントのルート要素です。ソケットサーバは、このドキュメントを受け取った後、クライアントに対して必要なポリシーファイルを提供する必要があります。このポリシーファイルに定義された許可によって、クライアントが接続を継続できるか、閉じるかが判断されます。
<policy-file-request/>
このデータを受け取ったソケット接続は、ポリシーファイルを返す必要があります。接続の許可、不許可は、返されたポリシーファイルの定義によって判断されます(図5参照)。
図5. ソケット接続を使用するケースでのポリシーファイル
(拡大表示するには画像をクリック)
ソケット接続用のポリシーファイルは、必ずソケット用として使用するようにしてください。HTTPソースからのURLポリシーファイルを、ソケット接続への許可付与に使用することは避けるようにしてください。
メモ:Adobe Flash Playerのバージョン9,0,124,0より前では、HTTPポリシーファイルをソケット接続で使用することが可能でした。
URLポリシーファイルは、すべてContent-Type: text/x-cross-domain-policyとして提供されるのが理想的です。このコンテンツタイプは、ポリシーファイルの有効性を判断する上で、permitted-cross-domain-policies属性のby-content-type値が使用するものと同じです。コンテンツタイプとしては、以下を利用することも許可されています。
text/* application/xml application/xhtml+xmlメタポリシーを把握するために、クライアントはマスターポリシーファイル以外にも、ドキュメントのX-Permitted-Cross-Domain-Policiesヘッダを確認することもあります。このヘッダでは、permitted-cross-domain-policiesで指定できる値に加えて、他のヘッダおよびそのコンテンツの内容にかかわらず現在のドキュメントをポリシーファイルとして扱わないことを指示する、none-this-responseを値として使用することも可能です。
マスターポリシーファイルは、crossdomain.xmlをファイル名にもち、ドメインのルートに配置されるポリシーファイルです(例: http://example.com/crossdomain.xml)。ポリシーファイルが必要とされる場合、クライアントはポリシーファイルを見つけるために、このデフォルト位置をチェックします。メタポリシーが遵守されるよう、ドメインには必ずマスターポリシーファイルを配置しておくことが推奨されます。
たとえマスターポリシーファイル以外のポリシーファイルの読み込みがクライアントに指示されている場合でも、クライアントはマスターポリシーファイルをチェックし、このファイルに定義されたメタポリシー(site-control要素で指定)が、リクエストしたポリシーファイルの使用を許可するかを確認する必要があります。マスターポリシーファイルが用意されていない場合、デフォルト動作が遵守されるかはクライアント次第になります。
マスター以外のポリシーファイルは、自らが配置されたディレクトリまたはそのサブディレクトリにあるデータへのアクセスのみを制御することができます。
allow-access-from要素およびallow-http-request-headers-from要素のdomain属性に指定された値と実際のドメイン名との照合判定時には、以下の規則が適用されます。
*)がサブドメインとして用いられている場合、サブドメインなしで用いられるドメインも一致と判断されますドメインの照合例について詳しくは、表2を参照してください。
表2. ドメイン照合例
| ドメイン値 | 一致と判断 | 不一致と判断 |
|---|---|---|
| www.example.com | http://www.example.com | http://example.com http://www.example.net http://www.adobe.com |
| *.example.com | http://example.com http://www.example.com http://subdomain.example.com |
http://www.example.net http://www.adobe.com |
| 127.0.0.1 | http://127.0.0.1 | http://localhost http://127.0.0 http://127.0.0.2 |
| www.example.* | ドメインが無効なため、一致なし | — |
Adobe Flash Playerは、Flash Player 6以降、クロスドメインポリシーファイルの使用をサポートしています。ただし、ポリシーファイルの一部の機能は、より新しいバージョンのPlayerから実装されています(表3参照)。
表3. Flash Playerのポリシーファイル対応状況
| Flash Playerのバージョン | 機能 |
|---|---|
| 将来 |
|
| 9,0,124,0 (8,0,42,0) |
|
| 9,0,115,0 |
|
| 7,0,19,0 |
|
| 7,0,14,0 |
|
| 6,0,21,0 |
|
Adobe Flash Playerによるクロスドメインポリシーファイルの扱いについては、他にもさまざまな情報が提供されています。以下の関連リソースには、Flash Playerとポリシーファイルが関係する問題のデバッグ方法やベストプラクティスなどが記されています。