
Adobe
本記事は、Adobe Flash Player 9のポリシーファイルに対して行われた変更、およびFlash Player 10ベータで予定されているポリシーファイルの変更点に対応するための実用的なガイド文献です。これらの変更が行われた理由、およびサイト所有者として、どうすれば強化された権限制御を利用できるかについて詳しくは、Flash Player 10ベータのセキュリティ変更点についてを参照してください。
ポリシーファイルは、どのSWFファイルにサーバとの通信を許可するかと、当該サーバとの通信時にSWFファイルが何をできるかを、サーバ所有者が指定するために用いられるFlash Playerの中核的な権限制御機構です。Webの通例的な権限設定は、すべてが完全に一致するドメイン上に存在する場合に、さまざまな操作を許可することです。ポリシーファイルを利用すれば、このような権限設定を拡充することができ、SWFファイルのWebドメイン外に存在するリソースを用いたパワフルなアプリケーションが開発できるようになります。たとえば、Flickrなどのサイトでは、SWFファイルがパブリックAPIを利用できるよう、任意のユーザがサーバに接続し、自らのSWFファイルにデータを読み込めるようにするためのポリシーファイルを設置しています。
ポリシーファイルに関しては、デベロッパーに対するFlash Playerの柔軟性を維持しながら常に最善のセキュリティをユーザおよびサーバに提供できるよう、時間の経過とともに、さまざまな調整・変更が必要とされてきました。本記事では、どのような変更が行われたかの情報と、それらの変更がいつFlash Playerに追加されたかを紹介することにします。
Flash Playerの新しいバージョンがリリースされると、どのバージョンのFlashを対象に書き出したかを問わず、新たな要件設定の縛りを受けるユーザが現れると考えられます。少なくとも、Flash Player 9,0,124,0以前で行われたセキュリティ変更には対処できることが求められます。Flash Player 10ベータにおけるセキュリティ面での変更は、まだ一般普及しているものではありません。しかし、Flash Player 10ベータはAdobe Labsでパブリックプリリリースが提供*されており、近い将来に現行バージョンとなる予定です。アドビでは、すでに発表されているセキュリティ面での変更がコンテンツに影響を及ぼさないよう、前もって計画をたてるようにすることを推奨しています。
表1は、既存ユーザに影響を及ぼす可能性がある、ポリシーファイル関連のセキュリティ変更点をまとめたものです。各セクションには、以前のプレイヤーより追加された変更点が記載されています。つまり、Flash Player 9,0,115,0で遭遇する恐れのある変更点については、9,0,47,0と9,0,115,0の両方のセクションを参照する必要があります。
次の表は、本記事の各セクションで紹介するトピックのクイックリファレンスでもあります。各トピックは、その変更点が盛り込まれたFlash Playerバージョンのセクションで解説することにします。
表1. Flash Playerバージョン別のセキュリティ変更事項
| セキュリティ変更事項 | Flash Player 9,0,47,0 | Flash Player 9,0,115,0 | Flash Player 9,0,124,0 | Flash Player 10,0,2,x |
|---|---|---|---|---|
| 厳格なXML解析処理 | ||||
| メタポリシーの適用 | ||||
| リダイレクトの制限 | ||||
| ポリシーファイルのcontent-type | ||||
| マスターソケットポリシーポート | ||||
| ローカルソケットの制限 | ||||
| ソケットポリシーの義務化 | ||||
| クロスドメインヘッダポリシー | ||||
| メタポリシーの義務化 |
リリース日: 2007年7月
影響度: この変更の影響を受けるデベロッパーは、ごく一部に限られます。
ポリシーファイルは有効なXMLである必要があります。 XMLが有効ではない場合、ポリシーファイル自体が無視されます。XML解析処理の厳格化は、ActionScript XMLパーサには一切影響しません。
リリース日: 2007年12月
影響度: 自らの制御下にはないサーバへのアクセスのためにポリシーファイルを利用している場合は、コンテンツが意図通りに機能することを確認するようにしてください。
解説: マスターの位置でHTTPまたはソケットポリシーファイルを処理する際、Flash Playerは、同一サーバ上の他のポリシーファイルを使用または無視するかを判断するために、オプションで設置できるメタポリシーを探します。メタポリシーはHTTPのレスポンスで宣言することも可能ですが、この方法は一般的ではありません。
www.example.comというサイトが存在する場合、マスターHTTPポリシーファイルの位置は http://www.example.com/crossdomain.xmlになります。また、 www.example.comへのソケット接続の場合は、マスターポリシーファイルは www.example.com のポート843のソケット接続から供給されます。
他のポリシーファイルを無効化するメタポリシーがマスターポリシーファイルに含まれている場合は、マスター以外の位置のポリシーファイルを用いる際に、データ読み込みに影響が及ぶことがあります。 アクセスしようとしているサーバにメタポリシーが用意されていない場合、Flash Playerはマスター以外のポリシーファイルを許容します。
メモ: Flash Player 10ベータでは、HTTPメタポリシーのデフォルト動作が変わります。マスターHTTPポリシーファイルが存在しない、あるいは他のポリシーファイルを許可するメタポリシーがマスターHTTPポリシーファイル上に存在しない場合、Flash Playerは、当該HTTPサーバ上のマスター以外のポリシーファイルを無視します。詳しい情報については、Flash Player 10ベータの節を参照してください。
影響度:サーバリダイレクトを使用している場合は、ポリシーファイルが意図通りに機能することを確認するために、SWFコンテンツの動作を検証することをお勧めします。
解説:Webサーバがポリシーファイルのリクエストを同一ドメイン上のURLに再転送する場合、Flash Playerは当該ポリシーファイルを受け入れるものの、(再転送後の)最終的なURLを、Flash Playerが元々リクエストしたURLであるかのように扱います。各種許可は、ポリシーファイルの最終的なURL位置のみをベースに付与されます。たとえば、 http://www.example.com/directoryA/crossdomain.xml が http://www.example.com/directoryB/crossdomain.xmlにリダイレクトされる場合、Flash Playerは directoryB にアクセスすることを許可するものの、 directoryAに対するアクセスは許可しません。
当初リクエストしたドメイン以外のポリシーファイルへの再転送に関しては、Flash Playerは従来通りポリシーファイルを無視します。
影響度: この変更の影響を受けるデベロッパーは、ごく一部に限られます。ご利用中のWebサーバが高度にカスタマイズ・特化されている場合は、サーバのcontent-type設定を確認することをお勧めします。また、ポリシーファイルに標準的な名前以外を使用している場合は、ポリシーファイルの名前が文字形式のcontent-typeに関連づけられていることを確認するようにしてください。
解説:ポリシーファイルには、Webサーバによって供給された適切なcontent-typeヘッダが必須です。Flash Playerは、content-typeヘッダが存在しないポリシーファイル、および不正な値が含まれたポリシーファイルを無視します。content-typeの有効な値は以下の通りです。
text/*(任意のtextタイプ)application/xmlapplication/xhtml+xmlcontent-typeはWebサーバによって設定されるものであり、ファイルの拡張子に基づいて割り当てられることが一般的です。ほとんどのWebサーバでは、content-typeとして上記のいずれかの値を設定することが推奨されます。ポリシーファイルのコンテンツタイプを変更したい場合は、ご利用中のWebサーバのドキュメンテーションを参照するようにしてください。
実際にこの変更を行う場合、クロスドメインポリシーファイルの推奨値は以下の通りです。
text/x-cross-domain-policy
影響度:マスターソケットポリシーサーバが用意されていない場合、ソケットサーバへの接続時に数秒の遅延が発生することがあります。
解説:ソケットポリシーファイルによってあらかじめソケット接続が許可されていない場合、Flash Playerは、当該ドメインのマスターソケットポリシーファイルを読み込むためにホストサーバのポート843への接続を試みます。ポート843のソケットポリシーファイルでは、当該ホストへのソケット接続に対するメタポリシーも設定できます。
影響度:localhostのソケットに接続している場合は、コンテンツが意図通りに機能することを確認する必要があります。この変更によって、通常のWebコンテンツに影響が及ぶことはありません。
解説:ローカルソケット接続の場合、SWFファイルのドメインおよび接続先ポートを問わず、必ずソケットポリシーファイルが必要になります。詳しい情報については、サンプルコードおよび各種オプションの解説が含まれた、ソケットポリシーファイルサーバの設定を参照してください。
リリース日: 2008年4月(現行のFlash Playerバージョン)
影響度: クロスドメインでのソケット通信を利用するデベロッパーの多くが、ソケットポリシーファイルの設定を変更する必要があります。
解説:HTTPで提供されるポリシーファイルを、当該サーバへのソケット接続の許可に用いることができなくなりました。この変更に伴い、ソケット接続に対してはソケットポリシーファイルによる許可が必須となります。ソケットポリシーファイルとは、当該ポリシーが含まれたXMLをFlash Playerに送信するために用いられるソケット接続です。
ソケットポリシーファイルの読み込みは、メインのソケット接続の確立とは異なる、単独のプロセスです。ソケットポリシーファイルを提供するには、別途サーバが必要となります。
詳しい情報については、サンプルコードおよび各種オプションの解説が含まれた、ソケットポリシーファイルサーバの設定を参照してください。
影響度:この変更点は、ソケットポリシーファイルが用意されていない自らのホストに対してソケット接続を作成しようとする、すべてのコンテンツに影響します。
解説:どのポート・ドメインを使用するかを問わず、ソケット通信には必ずソケットポリシーファイルが必要とされるようになりました。以前は、SWFファイルがホスティングされているのと同じホストに限り、ポリシーなしでも1024番を超えるポートに接続することができました。このような接続設定は今後許可されません。
影響度:ドメインを超えたネットワークリクエストにおいて、カスタムのHTTPヘッダが送られるようなSWFファイルを開発したデベロッパーは、これらのコンテンツが意図通りに機能することを確認する必要があります。
解説:別途ドメインに向けられたネットワークリクエストに、カスタムヘッダを追加するようなSWFコンテンツがある場合、送信される各ヘッダを許可するためのポリシーファイルが必要になります。この変更点は、一方向および双方向のネットワークAPI両方に対して適用されます。以下に、カスタムHTTPヘッダを許可するためのポリシーファイルの例を示します。
<cross-domain-policy> <allow-http-request-headers-from domain="trusted.com" headers="*"/> <allow-http-request-headers-from domain="*" headers="X-Harmless-Header"/> </cross-domain-policy>
ドメインにおけるヘッダ使用許可のための、他のポリシーファイル設定例について詳しくは、次のテクニカルノート「一部のヘッダがFlash Playerからリモートドメインへ送信されない」を参照してください。ヘッダとポリシーファイルについて詳しくは、『Flash Player 9 2008年4月付けセキュリティアップデートへの対応の理解』のポリシーファイルの節を参照してください。
リリース日:未公開。現在は、Adobe Labsにパブリックリリース*として掲載中。
現時点では、Flash Player 9,0,124,0およびそれ以前のバージョンの変更点にコンテンツを対応させるだけで十分です。しかしアドビでは、Flash Player 10ベータがリリースされた時点でコンテンツに思わぬ支障が発生しないよう、今から、Flash Player 10ベータ変更点への対応準備を整えることを強く推奨します。
Flash Player 10ベータに施されるセキュリティ変更の動作検証を行うには、Adobe Labsよりこのバージョンをダウンロードすることができます。
影響度:今回の変更は、マスター以外のHTTPポリシーファイルを使用するすべてのコンテンツに影響します。通常、loadPolicyFile APIを利用するコンテンツに影響が及びます。また、サーバのルートディレクトリにファイルを配置するのが困難な、コンテンツデリバリネットワーク(CDN)またはそれに類似したホスティング環境からデータを読み込むSWFファイルがある場合は、直ちに準備を進める必要があります。
解説:他のドメインのSWFファイルに対してデータの読み込みを許可するサーバには、必ず、所定のマスター位置(/crossdomain.xml)にポリシーファイルが配置されている必要があります。引き続き、サーバ上の他のポリシーファイルを使用することは可能ですが、この場合、必ずマスターポリシーファイルのメタポリシー設定を通じて、これらの使用が許可される必要があります。マスターポリシーファイルが所定のマスター位置にない場合、マスターポリシーファイルにメタポリシーが含まれていない場合、あるいはマスターポリシーファイルの設定がmaster-onlyになっている場合、Flash Playerは当該ドメイン上の他のポリシーファイルを無視します。
所定のマスター位置にポリシーファイルを作成するのが困難または望ましくない場合は、HTTPレスポンスヘッダを利用してメタポリシーを定義することも可能です。詳しくは、『Flash Player 9におけるポリシーファイルの変更』のメタポリシーの節を参照してください。
ポリシーファイルをディレクトリ単位で管理することを希望する場合は、メタポリシーだけを定義するマスターポリシーファイルを設置することができます。こうすれば、マスターポリシーファイル自体で各種権限を定義することなく、他のポリシーファイルを使用することが可能です。以下に、この設定に関するいくつかの例を示します。
サーバから提供されるすべてのコンテンツを完全に制御でき、しかも、ユーザまたは予期せぬコンテンツ提供者が当該サーバ上にポリシーファイルを作成するのが不可能な場合は、サーバ上のすべてのファイルがポリシーファイルとして使用されることを許可するために、meta-policyの値としてallが使用できます。このポリシーファイルの例を以下に示します。
<cross-domain-policy> <site-control permitted-cross-domain-policies="all"/> </cross-domain-policy>
適切な権限を持たないユーザがサーバ上にポリシーファイルを作成することを防止したい場合は、meta-policyの値としてby-content-typeが使用できます。この値を用いた場合、サーバ上にあるcontent-typeがtext/x-cross-domain-policyのすべてのファイルをポリシーファイルとして利用できます。この設定例を以下に示します。
<cross-domain-policy> <site-control permitted-cross-domain-policies="by-content-type"/> </cross-domain-policy>
Flash Player 9および10のポリシーファイル変更点にコンテンツが対応できることを確認するには、Adobe Labsに掲載のFlash Player 10ベータをダウンロード*してインストールします。このバージョンのFlash Playerには、本記事で紹介したセキュリティ変更がすべて含まれているとともに、Flash Player 10ベータで発表済みの、他のセキュリティモデル変更が盛り込まれています。
また、Flash Playerのログ保存機能を有効化することで、ポリシーファイルの変更に伴って発生したエラーの一覧が確認できます。ログ保存機能を有効化する方法について詳しくは、『Flash Player 9におけるポリシーファイルの変更』のログ保存の節』を参照してください。
メタポリシーは、サーバ上のポリシーファイルの使用・不使用を制御するための重要な要素です。コンテンツデベロッパーおよびサーバ管理者の方々には、用意されているさまざまなオプションに慣れ親しむことをお勧めします。さらに詳しい解説、およびこれらがHTTPまたはソケットポリシーにどのように適用されるかについて詳しくは、『Flash Player 9におけるポリシーファイルの変更』のメタポリシーの節を参照してください。
Justin Everett-Churchは、Flash Playerを担当しているアドビの上級プロダクトマネージャーです。2006年にアドビに入社する前、JustinはYahoo! Inc.でFlashプラットフォームマネージャーとして、同社を取り巻く資産を活用してリッチインターネットアプリケーション開発に適したオプションを検討する仕事をしていました。JustinはFlashの設計と開発に10年間*携わっており、Flashゲーム開発に関する書籍を3冊執筆しています。