アクセシビリティ
デベロッパーリソース

目次

Macromedia Flash Player 7 におけるセキュリティの変更について

データのロードに関するセキュリティ制約

このセクションでは、既存 Macromedia Flash コンテンツを従来どおりに提供するための修正方法を解説します。

新しいセキュリティ制約は、データの読み込みに関する次の操作に影響します。

  • loadVariablesloadVariablesNumMovieClip.loadVariables
    LoadVars.load、LoadVars.sendAndLoad
  • XML.loadXML.sendAndLoad
  • XMLSocket.connect
  • ランタイム共有ライブラリから読み込まれるシンボル
  • Flash Remoting (NetServices.createGatewayConnection)

Macromedia Flash Player 7では、上記の操作が次の条件下でおこなわれると正しく実行されません。

  • リクエスト元のムービーが同一ドメイン以外にある URL を参照している
  • リクエスト元のムービーが HTTPS プロトコルを利用せずに配信されているにも関わらず HTTPS プロトコルを利用する URL をリクエストしている

なお、Macromedia Flash Player 7 では、ムービーのパブリッシュに使用された Macromedia Flash のバージョンを問わず、上記の操作のほとんどが新しいセキュリティ制約の対象となります。ただし、ランタイム共有ライブラリに関しては、インポートするムービー、またはライブラリムービー (あるいは両方) が Macromedia Flash Player 7 用に作成されている場合に限り、新しいセキュリティの対象となります。

セキュリティ警告ダイアログボックス

Macromedia Flash Player 6 以前用に作成されたムービーが、Macromedia Flash Player 7 の新しいセキュリティ制約に違反し、Macromedia Flash Player 6 まで問題なくおこなわれていたデータロード操作をリクエストした場合、このリクエストは無視されず、つぎのようなダイアログボックス (図 1) が表示されます。

図 1. Macromedia Flash Player 6 以前用に作成されたムービーが従来の Player 6 が許可していたデータロード操作をリクエストした場合、Macromedia Flash Player 7 はセキュリティ警告ダイアログを表示します。

図 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 ピクセルの場合は、設定ダイアログボックス自体が表示されません。この場合、次の操作をおこなってください。

  1. デバック版 Macromedia Flash Player 7 ブラウザ用プレーヤー (プラグイン、もしくは ActiveX コントロール) をインストールします。
  2. Macromedia Flash Player の動作ログが保管される場所を特定します。Mac OS X の場合: "/Library/Application Support/Macromedia" ディレクトリ、Mac Classic の場合: "システム" フォルダ内の "Application Support:Macromedia"。Windows ではそれぞれのコンピューターの HOMEDRIVE および HOMEPATH 環境変数の設定によって異なります。これらは、コマンドプロンプトから「echo %HOMEDRIVE%」と「echo %HOMEPATH%」を入力することにより調べることができます。
  3. 動作ログが保管されるディレクトリにファイル名「mm.cfg」のテキストファイルを作成して、つぎの一行を記述します。

    SecurityDialogReportingEnable = true

  4. ブラウザを利用して、ムービーをテストします。
  5. mm.cfg ファイルと同じディレクトリに flashlog.txt ファイルが生成されているかを確認してください。flashlog.txt ファイルが生成されていない場合、新しいセキュリティ制約の影響はありません。flashlog.txt ファイルが生成されている場合は、ファイルの内容を確認してください。新しいセキュリティ制約の影響を受ける場合は、ファイル内につぎのような記述があります。

    Legacy domain match encountered - http://www.mysite.com/myMovie.swf is trying to access http://store.mysite.com/anotherMovie.swf

新しいセキュリティ制約に関する既存ムービーの修正方法

既存ムービーが正しく実行できない理由が、新しいセキュリティ制約のドメイン不一致の場合は、ムービーがアクセスしようとしているサーバーにポリシーファイルを設置することで、従来どおりの動作が実行できます。なお、ポリシーファイルの詳細については、次のセクションで解説します。

つぎに既存ムービーの修正方法を示します。

  1. ムービーがデータをロードしようとしている参照先のサーバーを特定します。参照先サーバーの特定には、前のセクションの mm.cfg に関する手順を使用します。前のセクションの例の場合、参照先のサーバーは、store.mysite.com でした。仮に参照先が XMLSocket サーバーの場合、XMLSocket サーバーと同じドメインの HTTP サーバー上ポート 80 にポリシーファイルを作成します。XMLSocket サーバーにアクセスしているかどうかは、セキュリティの警告ダイアログボックス内に "[ドメイン名]" だけではなく、"[ドメイン名]:[ポート番号]" が表示されるかによって特定できます。また、flashlog.txt 内に 参照先のフル URL はなく、"[ドメイン名]:[ポート番号]" が記述されていることによっても特定できます。
  2. 参照先サーバーのドキュメントルートディレクトリに "crossdomain.xml" のファイル名で新規ファイルを作成します。
  3. crossdomain.xml ファイル内につぎのテキストをコピーします。
    <cross-domain-policy>
      <allow-access-from domain="" />
    </cross-domain-policy>
    
  4. <allow-access-from> タグ内の "domain" 属性に、参照元のムービーが配置されているフルドメインを指定します。先述の例では、www.mysite.com が参照元のフルドメインです。
  5. ムービーが HTTPS プロトコルに関するあらたな制約の影響を受ける場合 (HTTPS プロトコルを利用しないムービーから HTTPS サーバー上のデータにアクセスする場合) は、<allow-access-from> タグ内に「secure="false"」属性を追加します。完成した <allow-access-from> タグは、つぎのようになります
    <allow-access-from domain="www.mysite.com" secure="false" />
  6. ポリシーファイルを作成したサーバーに対して複数のドメイン上に存在するムービーからのアクセスがある場合は、ポリシーファイル内に該当するドメインごとの <allow-access-from> タグを記述します。
  7. 逆に、ひとつのムービーから複数のサーバー上のデータを参照する場合は、参照先のサーバーごとにポリシーファイルを作成します。

この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 属性の値には、つぎのいずれかが使用できます。

  • 完全なドメイン名 (例:www.mysite.com )
  • IP アドレス (例:65.57.83.12 ) IP アドレスを指定した場合、IP アドレスそのものを利用して配信されたムービーからのリクエストのみが許可されます。指定した IP アドレスに最終的にポイントされているドメイン名がムービーの配信時に使用されている場合は、アクセスが拒否されます。
  • ワイルドカードを使用したドメイン名 (例:*.mysite.com ) ワイルドカードは、ドメインの最初の部分 (サブドメイン部分) のみに使用できます。ワイルドカードには、必ずアスタリスク(*) を使用し、ピリオド (.) で残りのドメイン名に結合します。仮に *.mysite.com というワイルドカードを使用したドメイン名を指定した場合、.mysite.com で終わるすべてのドメインから配信された Flash ムービーからのアクセスが許可されます。したがって、www.mysite.comstore.mysite.com、さらに、longer.subdomain.mysite.com からのアクセスはすべて有効です。また、ワイルドカードは、特例として mysite.com のようにサブドメインがないドメイン名にも有効です。
  • 完全なワイルドカード:* (アスタリスクひとつ) この場合、すべてのドメイン、および IP アドレスからのアクセスが許可されます。

それぞれの <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>