このセクションでは、既存 Macromedia Flash コンテンツを従来どおりに提供するための修正方法を解説します。
新しいセキュリティ制約は、データの読み込みに関する次の操作に影響します。
loadVariables、loadVariablesNum、MovieClip.loadVariables、LoadVars.sendAndLoadXML.load、XML.sendAndLoadXMLSocket.connectNetServices.createGatewayConnection) Macromedia Flash Player 7では、上記の操作が次の条件下でおこなわれると正しく実行されません。
なお、Macromedia Flash Player 7 では、ムービーのパブリッシュに使用された Macromedia Flash のバージョンを問わず、上記の操作のほとんどが新しいセキュリティ制約の対象となります。ただし、ランタイム共有ライブラリに関しては、インポートするムービー、またはライブラリムービー (あるいは両方) が Macromedia Flash Player 7 用に作成されている場合に限り、新しいセキュリティの対象となります。
Macromedia Flash Player 6 以前用に作成されたムービーが、Macromedia Flash Player 7 の新しいセキュリティ制約に違反し、Macromedia Flash Player 6 まで問題なくおこなわれていたデータロード操作をリクエストした場合、このリクエストは無視されず、つぎのようなダイアログボックス (図 1) が表示されます。

図 1. 左: ドメインが完全に一致していない場合の警告ダイアログ。右: HTTP/HTTPS に関する違反の場合の警告ダイアログ。Macromedia Flash Player 6 以前用に作成されたムービーが従来の Player 6 が許可していたデータロード操作をリクエストした場合、Macromedia Flash Player 7 はこれらのダイアログを表示します。
ユーザーが [許可] ボタンをクリックした場合、データロードの操作は、従来どおりに実行されます。[拒否] ボタンをクリックした場合は、データロードの操作を拒否することになります。データロード操作をリクエストするムービーのサイズが、このダイアログボックス (215 x 328 ピクセル) より小さい場合、ダイアログボックスは表示されることなく、[拒否] ボタンがクリックされたと同様に扱われます。
ダイアログボックス内の [今後表示しない] をチェックしておくと、たとえムービーが小さくてダイアログボックスが表示されない場合でも Macromedia Flash Player が以降同様のダイアログが発生した場合の挙動を記憶します。
215 x 138 ピクセル以上のムービーの場合、Macromedia Flash Player 7 を使用してムービーの動作を確認してください。新しいセキュリティ制約の影響を受ける場合は、セキュリティ警告のダイアログボックスが表示されます。
ただし、この動作確認をおこなう以前に Macromedia Flash Player 7 設定ダイアログボックス内の [今後表示しない] がチェックされている場合や、ムービーのサイズが 215 x 138 ピクセルの場合は、設定ダイアログボックス自体が表示されません。この場合、次の操作をおこなってください。
SecurityDialogReportingEnable = true
Legacy domain match encountered - http://www.mysite.com/myMovie.swf is trying to access http://store.mysite.com/anotherMovie.swf
既存ムービーが正しく実行できない理由が、新しいセキュリティ制約のドメイン不一致の場合は、ムービーがアクセスしようとしているサーバーにポリシーファイルを設置することで、従来どおりの動作が実行できます。なお、ポリシーファイルの詳細については、次のセクションで解説します。
つぎに既存ムービーの修正方法を示します。
<cross-domain-policy> <allow-access-from domain="" /> </cross-domain-policy>
<allow-access-from> タグ内の "domain" 属性に、参照元のムービーが配置されているフルドメインを指定します。先述の例では、www.mysite.com が参照元のフルドメインです。<allow-access-from> タグ内に「secure="false"」属性を追加します。完成した <allow-access-from> タグは、つぎのようになります<allow-access-from domain="www.mysite.com" secure="false" /> <allow-access-from> タグを記述します。この7つのステップを追うことで、既存ムービーを従来どおり動作させることができます。この記事のこれより先では、Macromedia Flash Player 7 をターゲットプレーヤーとしたムービーの作成方法、および既存ムービーの Macromedia Flash Player 7 に向けたアップグレード方法を解説します。
ご覧いただいたように、ポリシーファイルは、既存コンテンツに対する便利な対処策として利用できますが、他にも重要な利用目的があります。ポリシーファイルは、サーバーに対するアクセスの各種パーミッションを設定するために使用でき、ポリシーファイルが設置されたサーバー内のドキュメントに対する参照を、特定のドメイン、あるいは、すべてのドメインに存在する Macromedia Flash ムービーから受け付けるといったことを設定できます。ポリシーファイルの仕組みは、ActionScript の System.security.allowDomain メソッド(「ムービー間スクリプティングのパーミッション定義」参照) に似たものですが、System.security.allowDomain メソッドがムービー間の ActionScript のやりとりをコントロールするのに対して、ポリシーファイルは、データのロードをコントロールします。
ポリシーファイルを使用すると詳細にアクセス権限をコントロールできるので、時刻表や weblog のコンテンツなどを XML フィードで公開する場合などに便利です。また、参照元ドメインを限定しないことをポリシーファイルに定義しておけば、サーバーサイドプロキシの必要なく XML データを第三者が作成する Flash ムービーに公開することも可能になります。
Macromedia Flash Player 7 は、ドメイン外からのデータロードリクエストを受け取るとともに、データロード参照先サーバー上のポリシーファイルを探します。ポリシーファイルに参照元 Macromedia Flash ムービーに対するアクセスが許可されていることが確認できれば、データロードリクエストを処理します。
Macromedia Flash Player がポリシーファイルを探す場所は、サーバーの「/crossdomain.xml」パスのみです。したがって、ポリシーファイルは必ず参照先サーバーのドキュメントルートディレクトリにファイル名「crossdomain.xml」を使用して配置してください。また、ポリシーファイルは、ムービーが参照に使用するあらゆる方法に対して有効です。IP アドレスを使用した参照、同一サーバーを参照する複数のドメイン名での参照、さらには、HTTP、HTTPS といった異種プロトコルを使用した参照、これらすべての参照に対して、ポリシーファイルはサーバーを包括的にコントロールします。
Macromedia Flash Player は、通常ムービーがリクエストしたサーバーのポリシーファイルを探すと説明しましたが、ひとつのケースにおいて例外があります。これは、ムービーがドメイン外に存在する XMLSocket に接続する場合です。この場合、Macromedia Flash Player は、リクエストが接続しようとしているドメインの HTTP サーバー、ポート 80 にポリシーファイルを探しにいきます。これは、XMLSocket サーバーが実際のドキュメントを配信しないからであり、XMLSocket サーバー上にはポリシーファイルを用意できません。XMLSocket サーバーへのアクセスは、通常同じドメイン内に存在する HTTP サーバーがコントロールしています。
ポリシーファイルは、どの Macromedia Flash Player バージョン用に作成されたムービーに対しても使用できますが、Macromedia Flash Player 7 で再生されたときに限り有効です。
また、Macromedia Flash Player は、ドメイン間転送から受け取ったポリシーファイルを無視します。例えば、Macromedia Flash Player がリクエストした http://www.mysite.com/crossdomain.xml が転送されて http://elsewhere.mysite.com/crossdomain.xml からポリシーファイルが配信されるようなケースです。ポリシーファイルを配信する際には、このようなドメイン間転送を使用しないように注意してください (ただし、同一ドメイン内の転送は可能)。
先述のセキュリティ警告ダイアログボックスは、Macromedia Flash Player 6以前のバージョン用に作成されたムービーが、参照先のサーバーにポリシーファイルが存在しないにもかかわらず、従来許可されていたドメインを越える参照をおこなうときに表示されます。したがって、参照先のサーバーにポリシーファイルを作成すれば、セキュリティ警告ダイアログボックスは表示されなくなります。このセキュリティ警告ダイアログボックスの設定は、ポリシーファイルがすべてのサーバーに設置されるまでの間、旧バージョン用に作成されたムービーとの互換性を保つための暫定的な措置です。したがって、ユーザーが任意でマクロメディアの推奨するセキュリティ方針をカスタマイズするために用意されているものではありません。今回のセキュリティ基準の変更が広く浸透し、ポリシーファイルがサーバーに設置されるようになれば、このセキュリティ警告ダイアログボックス自体の必要性がなくなります。また、Macromedia Flash Player 7 用に作成されたムービーの場合、あらたなセキュリティ基準に基づいてポリシーファイルとともにムービーがデプロイされるので、このダイアログボックスが表示されること自体ありません。
ポリシーファイルは、XML 形式で記述します。XML 内には、つぎのように注釈を入れることが許可されています。
<!-- comment -->
ポリシーファイルは、ひとつの <cross-domain-policy> タグとその中に含まれるゼロまたは、単数、複数の <allow-access-from> タグから構成されます。<allow-access-from> タグ内には、必須の domain 属性を含み、アクセスを許可するドメインを指定します。domain 属性の値には、つぎのいずれかが使用できます。
それぞれの <allow-access-from> タグには、secure 属性を含めることができます。属性値には、true または false を使用します。デフォルト値は true です。secure="false" に設定すると HTTPS 以外のプロトコルを利用して配信されたムービーからのアクセスを許可することになります。なおこの設定は、HTTPS サーバーに配置されたポリシーファイルのみにおいて有効です。
secure="false" の設定は、HTTPS で保護されたデータを HTTPS 保護をうけないドキュメントに対して公開することになるので、マクロメディアは、このような設定をお勧めしません。HTTPS で保護されたデータを必要とする場合、Flash ムービー自体も HTTPS で保護することをお勧めします。しかし、すべてのドキュメントを HTTPS から配信することが経済的な理由などから非現実的な場合は、secure="false" を使用してマクロメディアが推奨する Macromedia Flash Player の HTTPS 保護デフォルト設定を上書きすることが可能です。
ポリシーファイル内に <allow-access-from> タグが記述されていない場合、ポリシーファイルは、意図的にすべてのアクセスを拒否していると解釈します。このような意図的なアクセス拒否ポリシーファイルを用意するのと、ポリシーファイル自体を用意しないのとでは違いがあり、Macromedia Flash Player 6 以前用に作成されたムービーから意図的なアクセス拒否ポリシーファイルが存在するサーバーにロードをリクエストした場合は、セキュリティ警告ダイアログボックスが表示されません。
つぎにポリシーファイルのサンプルを示します。
<?xml version="1.0"?> <!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd"> <!-- Policy file for http://www.mysite.com --> <cross-domain-policy> <allow-access-from domain="*.mysite.com" /> <allow-access-from domain="www.myothersite.com" /> </cross-domain-policy>
ポリシーファイルを使用することによって、デフォルトでは許可されていないドメインを越えたアクセスが可能になります。デフォルトのセキュリティ設定を上書きするわけですから、ポリシーファイルの役割りや動作に関しては、充分に理解するようにしてください。
ポリシーファイル内にドメインを指定すると、指定したドメインに存在するすべてのサーバーに対して、ポリシーファイルが設置されたサーバー内のすべてのドキュメントへのアクセスを許可することになります。通常は、このような設定がパブリックなサーバーに求められています。サーバーからパブリックなドキュメントのみを提供する場合、サーバーへのドキュメントリクエストをおこなうドメインを制限せず、ファイルがいつでもダウンロードできるようにしておきます。このようなあらゆるドメインからのアクセスを許可する場合は、つぎのようにパブリックなアクセスを許可するポリシーファイルを配置してサーバーを公開します。
<allow-access-from domain="*" />
一方、パスワード認証などといった認証システムを採用している場合や、ファイヤーウォールを設置して外部アクセスを制限しているようなサーバーの場合、パブリックアクセスを許可するポリシーファイルを配置することは賢明ではありません。仮にパブリックポリシーファイルをこれらの場面で使用すると、サーバー内のドキュメントは、サーバーが信頼するすべてのコンピュータ上にて実行される Macromedia Flash ムービーからアクセスできることになり、必ずしも信頼しないエンドユーザーに対してサーバー上のプライベートな情報を公開してしまう可能性があります。
このようなケースでは、ポリシーファイル内に必ずアクセスが発生することが判っているドメインだけを指定します。仮に www.bigbang-corp.com から配信された Macromedia Flash ムービーに bigbang.staticland.net サーバーから配信される XML データのロードを許可する場合、bigbang.staticland.net サーバー上に www.bigbang-corp.com からのアクセスを許可するポリシーファイルを配置します。
また、Macromedia Flash ムービーがサーバー内のドキュメントにアクセスすることが全くなく、より一層安全にドキュメントを保護したい場合は、該当サーバーにすべてのアクセスを拒否するつぎのポリシーファイルを配置しておくと良いでしょう。
<cross-domain-policy>
</cross-domain-policy>