アクセシビリティ

Flash記事

 

Flash Player 8 のセキュリティ機能の変更点


目次

ローカルセキュリティのシナリオ

次の各シナリオは、Flash Player 8 の新しいローカルセキュリティ規則の影響を示すものです。

ユーザーのシナリオ: Flash の作成者とその同僚

Flash Player 8 のローカルセキュリティ規則は、エンドユーザーを保護するように設計されています。エンドユーザーにとってのローカル SWF は通常、インターネット上のソースからダウンロードしたか、アプリケーションの一部としてインストールした、最終的なコンテンツです。しかし、Flash 作成者にとってのローカル SWF は、通常、最終的には HTTP サーバーに配置される開発中のコンテンツの一時的なコピーであることがほとんどです。ローカルファイルの状態にある SWF をプレビューしているため、セキュリティ上の制約によってコンテンツが期待したように動作しないことがあります。

開発中の Flash コンテンツをテストする 3 つの方法を次に示します。最初に挙げた方法が最も単純な方法で、その後に挙げた方法の方が複雑になります。

  • Flash オーサリングアプリケーションの [ムービープレビュー] を使用する方法。 [ムービープレビュー] プレイヤーでは新しいローカルセキュリティ規則がまったく適用されないため、このモードでは問題が発生しません。
  • スタンドアローンプレーヤーまたはブラウザプレイヤーを使用してローカル SWF を表示する方法。 この方法では、たとえば SWF が HTTP URL を使用して getURL を呼び出した場合など、新しい規則の適用によって発生する問題を確認できます。
  • HTTP テストサーバーに SWF を置き、ブラウザで表示する方法。 HTTP 経由で表示される SWF はローカル SWF ではなく、Flash Player 8 でも変更されていないリモートセキュリティ規則の適用対象となります。このため、このテスト方法でも、ローカルセキュリティ規則の適用による問題は発生しません。

ブラウザでプレビューする際に、望ましくないセキュリティ制限が適用されることを防ぐには、開発中の Flash コンテンツと、インターネット上のソースからダウンロードした "信頼されない" SWF とを区別することができると便利です。残念ながら、自動化された確実な方法でこの処理を行う機能は、Flash Player には備わっていません。

その代わりに、ローカルファイルシステムの特定の領域に置かれている SWF をすべて "信頼される" SWF と認識するように、Flash Player を設定することができます。たとえば、開発中の Flash コンテンツをすべて C:\FlashSites に格納し、設定マネージャを使用して C:\FlashSites ディレクトリを "信頼される" パスのリストに追加することができます。この設定を行った後は、C:\FlashSites またはそのサブディレクトリ内にある SWF を表示するたびに、それらの SWF が Local-trusted サンドボックスに置かれるため、セキュリティ規則の適用による操作の失敗を回避できます。この処理を行った場合は、信頼されないソースの SWF を信頼される領域に置かないように注意する必要があります。自分で作成したローカル SWF を、他の人が作成した信頼されない SWF から分離しておくことによって、Flash Player のすべてのエンドユーザーに提供されるのと同じレベルの保護を得ることができます。

設定マネージャを使用して "信頼される" ディレクトリを設定すると、セキュリティ規則の適用による問題に邪魔されることなく、作業を続けることができます。しかし、開発作業の間には、HTML 作成者、Flex 開発者、ビットマップ作成者など、さまざまな人と SWF を共有する必要があります。また、作成中の SWF を上司やクライアントに見せることが必要な場合もあります。SWF を共有する人の中には、コンピュータに "信頼される" ディレクトリを設定していない人がいる可能性があります。その人がローカルファイルとして SWF を開き、SWF が (たとえば getURL 呼び出しによって) インターネットとの通信を試みたり、HTML ページとの通信を試みた場合、ローカルセキュリティ規則の適用によって、ローカルでプレビューされているコンテンツが意図したとおりに動作しないことがあります。また、これらの人の中に、FlashAuthor.cfg をコンピュータにインストールしていない人がいる可能性もあります。SWF のバージョンが 8 以降であった場合、FlashAuthor.cfg をインストールしていないと、操作の失敗の原因を通知するダイアログボックスも表示されません。

残念ながら、これらの問題を一挙に解決する方法はありません。根本的な問題は、Flash Player が同僚のコンピュータで実行されたときに、開発中の (一時的な) ローカル SWF と、インターネットから入手した信頼できない SWF とを区別する方法がないという点です。

問題を解決する最も確実な方法は、開発中の SWF をファイルとして送信せずに、HTTP テストサーバーにポストしてからそのリンクを送信する方法です。しかし、この方法を使用できない場合もあります。たとえば、プライベート HTTP サーバーを持っていない場合や、同じネットワークに属さない人と SWF を共有する必要があるが、SWF をパブリックサーバーにポストすることは避けたい場合には、この方法を使用できません。このような場合のために、他の解決方法を考える必要があります。

  • SWF プロジェクターを作成する
  • Local with Filesystem ではなく Local with Networking として SWF をパブリッシュする
  • SWF プロジェクト用に、FlashPlayerTrust ファイルを設定するインストーラを作成する
  • 設定マネージャの構成方法を同僚に送る
  • 同僚のサーバーに SWF をポストするように依頼する

状況に応じて最善の方法を選択してください。

ユーザーのシナリオ: Flash Player のエンドユーザー

ほとんどの場合、新しいローカルセキュリティ規則は、エンドユーザーには通知されずに適用されます。しかし、既に述べたように、インターネットとやり取りするように記述されたローカル Flash アプリケーションを使用しているユーザーもいます。こうしたユーザーが Flash Player 8 にアップグレードした場合、安全でない可能性のある操作を試みたときにそれを警告するダイアログボックスが表示されるようになります。

この警告ダイアログボックスが表示されたときには、そこに示された問題を無視するか、アプリケーションベンダーに解決方法を問い合わせるか、自分自身で問題を解決することができます。

自分自身で問題を解決する場合は、警告ダイアログボックスの [設定] ボタンをクリックし、設定マネージャにアクセスします。設定マネージャでは、ローカルセキュリティ規則を確認し、[場所の編集]-[場所の追加] を選択して、信頼するローカルパスを指定できます。ただし、信頼する必要のあるパスを判断するのが難しいことがあります。警告ダイアログボックスに表示されたパスを指定するだけで十分な場合もありますが、1 つのアプリケーションに複数の SWF が関わっている場合もあります。このような場合、関係する SWF が置かれているディレクトリ全体を指定することが必要になります。信頼するパスに指定する必要がありそうなすべてのパスを試した後で、元のアプリケーションに戻り、(たとえばブラウザを最新表示することによって) アプリケーションを再起動する必要があります。

設定マネージャにアクセスしたユーザーは、[常に許可] を選択してバージョン 7 以前のすべての SWF を "信頼する" SWF に指定するかどうかを決める必要もあります。この操作は、信頼するパスを判断するより簡単ですが、便利さと引き換えにユーザーのセキュリティレベルが低くなります。

アプリケーションのシナリオ:ハイブリッドヘルプシステムの問題の解決

ローカル SWF を使用するアプリケーションを管理していて、ユーザーから、そのアプリケーションの一部を表示するときに Flash Player のセキュリティ警告のダイアログボックスが表示される理由を尋ねられた場合について考えてみます。このアプリケーションはハイブリッドヘルプシステムで、通常の形式のローカル SWF アプリケーション (getURL や fscommand を使用して互いに通信する HTML ファイルと SWF ファイルのコレクション) であるとします。

まず最初に、問題の深刻度を判断する必要があります。重要なアプリケーションの重要なコンポーネントに大きな問題があるのか、それほど重要でないプロジェクトの一部の機能に欠陥があるのか、修正したファイルをすべてのユーザーに再配布する必要があるのかなどを判断します。修正作業に入る前に、その修正が必要であるかどうかを必ず検証してください。

1 つの方法として、設定マネージャにアクセスしてヘルプシステムのパスを "信頼する" パスに指定するように、ユーザーに指示することができます。しかし、ユーザーによっては、多くの手順を実行してこの設定を行う必要があります。また、セキュリティ設定の影響をよく理解できないユーザーは、不安を感じる可能性があります。

上記の方法以外に、SWF を Local with Networking SWF として再パブリッシュしたり、Local Content Updater* を使用して SWF を後処理したりすることもできます。コンテンツが getURL を呼び出すことによってのみセキュリティ違反が発生する場合は、この方法で十分です。しかし、SWF ファイルと HTML が fscommand、getURL("javascript:...")、またはその他のハイブリッドスクリプティング操作を使用して互いにスクリプティングする場合、Local with Networking サンドボックスを指定するだけでは、アプリケーションを元の状態に戻すことができません。SWF を Local-trusted サンドボックスに置く必要があります。

ユーザーが技術的な内容をよく理解している場合は、FlashPlayerTrust ファイルと、その置き場所についての指示を提供するだけで済みます。また、適切な場所に FlashPlayerTrust ファイルを自動的に作成するスクリプトやプログラムを作成することもできます。SWF がインストールされている場所がわかっている場合は、それらの SWF が置かれるディレクトリを "信頼する" ディレクトリに指定するだけで済みます。しかし、ユーザーがデフォルト以外の場所にインストールしている場合は、SWF をインストールした場所を知らせるようにユーザーに求めるか、ユーザーのファイルシステムを検索して SWF が置かれている場所を確認する必要があります。

アプリケーションのシナリオ:時々接続する連絡先マネージャ

最後に、定期的にデータを HTTP サーバーと同期し、通常はそのデータのローカルリポジトリとして機能する、ローカル SWF アプリケーションを構築する場合について考えてみます。対象となるデータはアドレス帳であり、アプリケーションは "時々接続する連絡先マネージャ" であるとします。

ここで、Net-send 権限は必要であるが、Local-read 権限は不要であると仮定します。たとえば、設定を行うためにローカル XML ファイルを読み取る必要はありません。この場合、SWF のパブリッシュ時には、Flash パブリッシュオプションの [ローカルでの再生に関するセキュリティ] で [ネットワークにのみアクセスする] を選択します。これにより、SWF は、getURL、XML.load、およびその他の HTTP 操作を自由に行うことができるようになります。

次に、アプリケーションを HTTP データソースに接続して同期を行います。XML.sendAndLoad() を使用して単純な XML データを交換するとします。XML.sendAndLoad は Net-read 操作であるため、同期先の HTTP サーバーにポリシーファイルが必要です。ポリシーファイルで HTTP サーバー全体ではなく関連データのみを制御するように、ポリシーファイルを XML データソースの隣に置き、クライアント SWF でポリシーファイルの場所を指定して System.security.loadPolicyFile を呼び出します。ポリシーファイルは次のようになります。

<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy> 
          

グローバルアクセス許可の原則に基づき、Local with Networking SWF がサーバーからデータをロードできるように、ポリシーファイルではすべての場所 ("*") を信頼する必要があります。

これで、ローカルセキュリティ規則の適用による問題を回避することができます。