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

Flash Player 記事

 

Flash Player 8 のローカルファイルセキュリティ


上条 晃宏

上条 晃宏

マクロメディア株式会社
コンサルタント

ユーザレベル:
すべて

この記事では、Flash Player 8 の新しいセキュリティ機能について解説します。

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

Flash Player 8 では、ローカルファイルに関するセキュリティが強化されています。これにより、以前のバージョンのFlash Player 上では実行できたコンテンツでも、Flash Player 8 で実行すると、処理が中断され、警告のダイアログが表示されるケースがあります。これは、当該のコンテンツが潜在的に危険な操作を要求したと判断されたためで、Flash Player 8上でも従来のように閲覧できるようにするには対応が必要です。このドキュメントでは、Flash Player 8 の新しいセキュリティ機能の解説と、変更により影響を受けるローカルファイルを実行するための設定について説明を行います。

新しいセキュリティ制限の影響範囲

  • 変更の影響を受けるコンテンツ
    ブラウザ内またはスタンドアローンプレーヤ内で実行される、ローカルのハードディスク上に保存されたSWF、及び、CD-ROM 等のリムーバブルディスク上のSWF、あるいはローカルネットワーク(UNC 指定:Windows ネットワーク「\\serverName」経由)上に配置された SWF
  • 変更の影響を受けないコンテンツ
    インターネット上に配置されているSWF(ほとんどのWebコンテンツはこれにあたります)、ブラウザ内またはスタンドアローンプレーヤで実行されないローカルのSWF(例えば、Flash Player の Active X モジュールを組み込ん だWindows アプリケーション)、プロジェクタ形式(exe 形式)の Flash コンテンツ

強化されたローカルファイルに対するセキュリティ

ローカルディスクから読み込まれたSWFに対して、Flash Player 8は、標準ではローカルとインターネット両方へアクセスすることを許可しません。これは、ローカルディスクに配置された悪意のあるSWFが、許可なく外部に情報を送信するといった状況が発生することを防ぐためです。通常、Flash Player 8では、ローカルSWFファイルの動作は、ローカルコンテンツのみのアクセスか、インターネットアクセスのみかのどちらかに制限されています。両方のリソースにアクセスが必要な場合には、該当するSWFファイルを、閲覧者の環境で、信頼できるファイルとして登録する必要があります。なお、この制限はどのバージョンでパブリッシュされたSWFファイルに対しても適用されます。

ローカルSWFファイルのカテゴリー

Flash Player 8 では、ローカルSWFファイルは、以下の3つのカテゴリーのいずれかに分類されます。

  • Untrusted (Local-with-file-system):
    ローカルアクセスのみが可能なカテゴリーです。ローカルのSWFファイルのデフォルトモードです。Flash 8 以前のバージョンのオーサリング環境でパブリッシュされた、既存のSWFはこのカテゴリーになります。
  • Local with networking:
    インターネットアクセスのみが可能なカテゴリーです。Flash 8 のパブリッシュ設定パネルのオプションから選択することで、Untrustedカテゴリーから変更可能です。この設定変更は、SWFファイルがローカルディスクからロードされた場合以外には何も影響しません。パブリッシュ済みのSWFファイルの設定を変えるには Macromedia Local Content Updater を使用することができます。Local Content Updater は以下の URL からダウンロード可能です。
    http://www.macromedia.com/support/flashplayer/downloads.html

    注:上の画面キャプチャは、英語版 Flash 8 です

  • Trusted:
    ローカルアクセスとインターネットアクセス、JavaScript との通信が可能なカテゴリーです。SWF の閲覧者の環境に設定を行うことで、自由にリソースにアクセスできるようになります。設定方法は以下を参照してください。

信頼できるローカルSWFの設定方法

ローカル SWF ファイルを3つ目の Trusted カテゴリーにするのは、以下のどちらかの方法で行うことができます。

  • インストーラを作成する
    コンテンツの製作者は、信頼できる SWF ファイル、もしくは信頼できるファイルを含むディレクトリを登録するための .cfg ファイルを作り、それを適切な場所に配置するインストーラを提供することができます。.cfg ファイルは、パス名やファイル名が記述されただけの単純なテキストファイルです。

    例)sample.cfg
    # これはコメント行です
    C:\Program Files\Sample\swfs

    .cfg ファイルを配置する場所は、以下に示す場所のどちらかでなければなりません。このとき .cfg ファイルの名前は任意で、また、複数の .cfg ファイルを置くことが出来ます。
    1つ目の場所への設定には、管理者権限が必要です。

    Windows:<system>\Macromed\Flash\FlashPlayerTrust
    (<system> の例 : C:\WINDOWS\system32)
    Mac:<app support>/Macromedia/FlahsPlayerTrust
    (<app support> の例 : /Library/Application Support)

    2つ目の場所は、ユーザごとに固有の設定になります。

    Windows<:app data>\Macromedia\Flash Player\#Security\FlashPlayerTrust
    (<app data> の例 : C:\Documents and Settings\<user>\Application Data)
    Mac:<app data> /Macromedia/Flash Player/#Security/FlashPlayerTrust
    (<app data> の例 : /Users/ <user>/Library/Preferences)

  • 閲覧者が自分で設定する
    設定マネージャを使うと、閲覧者は信頼できるローカル SWF ファイルか、それを含むディレクトリ自身を信頼できるものとして登録することができます。このとき、ユーザは対象になるファイルもしくはディレクトリへのパスを知っている必要があります。設定マネージャの詳しい使用方法は、以下の URL をご参照ください。
    http://www.macromedia.com/jp/devnet/flashplayer/articles/fp8_security_warning_02.html#05

サンドボックスについて

全ての SWF ファイルは Flash Player のサンドボックス内で実行されます。インターネット上の SWF ファイルには、ドメインごとにそれぞれサンドボックスが用意され、他のドメインの SWF とは自由に通信できないようになっています。また、ローカルリソースへのアクセスも制限されています。ローカルの SWF ファイルについては、3つのカテゴリーごとに個別のサンドボックスが割り当てられます。これにより、異なるカテゴリーの SWF ファイル間の呼び出し、およびインターネットからロードされた SWF との通信はサンドボックスによって制限されています。 また、_global オブジェクトもカテゴリーごとに個別になります。従って、異なるカテゴリーの SWF ファイル間で _global を利用した変数の共有はできません。

共有オブジェクトについて

Local-with-networking カテゴリーのローカル SWF ファイルは、専用の領域に共有オブジェクトを作成します。これは、他のカテゴリーのローカル SWF ファイルとは共有されないため、Untrusted カテゴリーのローカル SWF ファイルと連携して、ローカルのデータを外部に送信する手段としての使用はできないようになっています。一方、Untrusted カテゴリーと Trusted カテゴリーのSWFファイルは、Flash Player 7 以前のローカル SWF ファイルと領域を共有します。この仕様は、一見不思議に思えるかもしれませんが、外部にデータを送信できるのはTrusted カテゴリーの SWF ファイルだけであることと、Trusted カテゴリーのSWFファイルは自由なリソースアクセスを許されたファイルであることから理解できるかと思います。 なお、カメラやマイクの使用許可、ディスクの使用量などその他の設定は、全てのカテゴリーで共有されます。

Untrusted カテゴリーの制限事項

Untrusted ローカルファイルは以下の操作を行うことが出来ません。

  • HTTPのようなネットワークプロトコルを用いた要求。
    例: loadMovie(“http://”), XML.send(“http://”), getURL, Flash Remoting
  • 他のカテゴリーのSWFとのクロススクリプティング
    例: 変数、関数の呼び出し、ローカルコネクション
  • HTML内のスクリプトとのインタラクション
    例: fscommand, getURL(“javascript:”), GetVariable[JS], SetVariable[JS]

Untrusted ローカルファイルが上記のような処理を行おうとすると、処理が停止され、以下のようなダイアログが表示されます。

Local with networking カテゴリーの制限事項

Local with networking カテゴリーのファイルは、ローカルファイルシステムへアクセスすることができません。
以下は実行できない処理の例です。

loadMovie(“file:///”), LoadVars.load (“file:///”)

また、UntrustedカテゴリーのSWFとのクロススクリプティングやローカル HTML 内のスクリプトの呼び出しも行うことができません。 一方、ネットワークアクセスについては、データ送信は自由にできるものの、サーバーからのデータの取得、あるいはネットワーク経由でロードされた SW Fとの通信には明示的な許可が必要になります。このために、新しく「*」(ワイルドカード、全てのドメインの意)によるアクセス許可が設定できるようになりました。Local with networking カテゴリーの SWF には、以下のように、操作に対する許可を与えることができます。

  • サーバーからのデータ取得
    サーバーのルートポリシーファイル(/crossdomain.xml)、または個別のポリシーファイルに以下の行を記述 <allow-access-from domain=”*”/>
  • ネットワークからロードされた SWF とのクロススクリプティング
    ロードされた SWF ファイルにSystem.security.allowDomain(“*”) を記述
  • ネットワークからロードされた SWF とのローカルコネクション
    ロードされた SWF ファイルにLocalConnection.allowDomainメソッドが ‘localdomain‘ のドメインに対してtrueを返すように実装
  • HTML 内スクリプトの呼び出し
    HTML 内にallowScriptAccess = “always” を記述 (もしくはこのオプション自体を記述しない)

なお、上記のように「*」によりドメインを指定すると、すべてのドメインからのアクセスを許可することになります。例えファイアーウォール内でも、重要なデータを管理しているサーバーにこの設定を行う際は、十分に安全性を検討してください。

セキュリティ機能変更により影響を受けるコンテンツの対応

Flash Player 8 のセキュリティ機能変更により、ローカルコンテンツがインターネットにアクセスしたり、JavaScript を呼び出そうとする度に警告が表示されるようになることがあります。この動作はセキュリティをより強化するためのものであり、必要な変更ではありますが、一方で閲覧するユーザにとっては煩わしいものでもあります。そのような場合には以下の方法で対応することが考えられます。

  • ローカルの SWF ファイルを Local with Network カテゴリーにする
    SWF ファイルがローカルのファイルを必要としない(SWF ファイルの読み込みを除く)場合で、ネットワークアクセスが原因でセキュリティ警告が表示されたら、SWF ファイルをすべて Local with Network カテゴリーにすることで、これを回避できます。この設定をする際には、データを取得するサーバーに Local with Network カテゴリーの SWF ファイルに対するアクセス許可の設定が必要です。
  • インストーラを作成する
    Trusted カテゴリーの SWF ファイルにするための .cfg ファイルをインストールするプログラムを配布する方法です。このとき、.cfg ファイルの名前は任意ですが、他のインストーラが作成したファイルの上書きをする可能性があるため、「会社名+コンテンツ名」のように、重なりにくい名前にすることをお勧めします。また、CD-ROM 等で配布されているコンテンツの場合、リムーバブルディスクへのパスを信頼できるフォルダとして登録すると、ディスクを入れ替えたときにもその設定が有効になるため、潜在的なセキュリティホールになることが懸念されます。そのため、直接リムーバブルディスクへのパスを登録する代わりに、以下のいずれかの方法をとるようにしてください:

    1) コンテンツをすべてハードディスク内のフォルダにコピー、そのフォルダを信頼できるフォルダとして登録

    2) リムーバブルディスクからコンテンツを読み込むための SWF ファイルを作成し、ハードディスク内の適切な場所に配置。そのSWFファイルへのパスを信頼できるファイルとして登録
  • ユーザに設定マネージャをガイドする
    配布先が限られている場合、あるいはエンドユーザのコントロールが可能な場合は、設定マネージャを使用して、ユーザ自身に登録を促すことも考えられます。この場合には、登録の必要なファイルあるいはフォルダの情報をユーザに知らせることになります。

参考資料(英文)

Flash Player 8のセキュリティ機能に関連する API についての詳細は以下のドキュメントに記述されています。
Security APIs Whitepaper* (PDF, 80K) http://www.macromedia.com/devnet/flashplayer/articles/fp8_security-related_apis.pdf

変更点を含む、Flash player 8 のセキュリティ機能全般についての情報は、以下のドキュメントをご参照ください。
Security Whitepaper (Clients)* (PDF, 888K)
http://www.macromedia.com/devnet/flashplayer/articles/flash_player_8_security.pdf

著者について

上条 晃宏: マクロメディアで Flash プラットフォーム上のユーザー体験やアーキテクチャデザインのコンサルティングを担当、数多くの Flash / Flex プロジェクトに携わる。