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

目次

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

ローカルセキュリティの基本

Flash Player 7 以前では、ローカル SWF (ローカルパスを使用してユーザーのファイルシステムからロードされる SWF) は、Flash Player のセキュリティ規則によって通常管理されるほとんどの操作の実行を自由に許可されていました。たとえば、HTTP 経由でロードされる SWF は XML.load() を使用して、自らのソースのドメインからのテキストのロードのみ (デフォルトで) 許可されていますが、Flash Player 7 で実行されるローカル SWF は XML.load() を使用して、任意の HTTP URL またはローカルファイルシステムのパスからのテキストのロードを許可されていました。

"local-read" という権限を使用してローカルパスからテキストファイルを読み取るとします。また、Flash Player 7 で、すべての SWF が "net-send" という追加の権限を持っているとします。この場合、たとえば LoadVars.send() による HTTP POST 操作によって、任意のデータをインターネット上の任意の場所に送信できまます。エンドユーザーが信頼されないソースからダウンロードしたローカル SWF は、local-read と net-send を組み合わせて使用して、ユーザーのコンピュータからテキストファイルを読み取り、それらのコンテンツをインターネット上の任意の場所に返信できます。この操作はユーザーの知らない間に不正に行われます。

Flash Player 8 で、ローカル SWF に適用される規則を要約すると次のようになります。デフォルトでは、ローカル SWF は local-read 権限を保持しますが、net-send 権限を失います。それらの SWF は、いかなる方法でもインターネット (または任意の HTTP サーバー) と通信することは許可されません。また、SWF ファイル内の設定を変更することによって、Flash 作成者は、SWF が local-read 権限を失う代わりに、net-send 権限を得るように選択することもできます。さらに、Flash 作成者とユーザーは、これら両方の権限を持つ "信頼される" ステータスに SWF を上げるように、Flash Player を構成できます。つまり、SWF は Flash Player 7 で持っていたものと同じ権限を持つことになります。

影響を受けるコンテンツ

Flash コンテンツは次の 2 つの要因によって影響を受ける場合があります。つまり、そのコンテンツがローカルコンテンツかどうか、どのタイプの Flash Player で実行されるかです。

影響を受ける SWF はローカルパスからロードされたものです。このような URL 形式の例を次に示します。

  • c:\temp\my.swf
  • file:///c|/temp/my.swf
  • /temp/my.swf
  • file:///temp/my.swf
  • \\server\share\my.swf
  • file:////server/share/my.swf
  • 既にローカルにある SWF によってロードされた相対 URL

Flash Player にはいくつかの異なるタイプがあり、各タイプの Flash Player はそれぞれの環境で影響を受けます。

  • Web ブラウザプレーヤー (ActiveX コントロールおよびプラグインプレーヤー) は、Webブラウザで常に使用されるローカルセキュリティ規則に従います。
  • ブラウザアプリケーション以外で使用される Webブラウザプレーヤーは必ずしもローカルセキュリティ規則に従うとは限りません。このタイプのプレーヤーを埋め込んだアプリケーションを維持する場合は、Flash Player の埋め込みとローカルセキュリティに関するセクションを参照してください。
  • スタンドアロンプレーヤーはローカルセキュリティ規則に従います。
  • Macromedia Flash オーサリングアプリケーションやスタンドアロンプレーヤーから作成できる Flash プロジェクタはローカルセキュリティ規則に従いません。それらが実行可能なアプリケーションであるためです。ユーザーはこのようなアプリケーションを慎重に扱う必要があることを一般に知っています。
  • Flash オーサリングプレーヤーはローカルセキュリティ規則に従いません。それらが Web にあるコンテンツを再生するのではなく、開発中のコンテンツをテストするために使用されるためです。

サンドボックスのタイプ

Flash Player 8 では、すべての SWF (および SWF-HTML スクリプティング目的の HTML ファイル) は次の 4 タイプのサンドボックスのいずれかに置かれます。

  • remote : 非ローカル URL にあるファイルはすべてリモートのサンドボックスに置かれます。このようなサンドボックスは多数あり、ファイルのロード元の各インターネット (またはイントラネット) ドメイン用に使用されます。このタイプのサンドボックスは Flash Player 6 で導入されたものであり、Flash Player 8 でも変更されていません。
  • local-with-filesystem : これは Flash Player 8 でのローカルファイル用のデフォルトのサンドボックスです。このサンドボックス内の SWF は、いかなる方法でもインターネット (または任意の HTTP サーバー) と通信することは許可されません。たとえば、HTTP URL を loadMovie()、getURL()、または XML.load() に渡すことは許可されません。このような操作が Flash Player 7 では許可されていたため、エンドユーザーが Flash Player 7 から Flash Player 8 にアップグレードした後、バージョン 7 以前の SWF がインターネットと通信しようとすると、以前は機能していたコンテンツが意図どおりに機能しなくなる可能性があります。したがって、バージョン 7 以前の SWF がインターネットと通信しようとすると、Flash Player 8 では、警告ダイアログボックスが表示され、その SWF がインターネットと通信できなかったことが通知されます。警告ダイアログボックスには、ユーザーが設定マネージャにアクセスするためのボタンがあります。設定マネージャで、影響を受けるコンテンツを local-trusted ステータスに上げるように選択することもできます (以下を参照)。
  • local-with-networking : このサンドボックス内の SWF は HTTP 経由での通信は許可されますが、ローカルファイルシステムからの読み取りは許可されません。あらゆるバージョンの SWF は、SWF 自体に設定されたフラグを使用して、このサンドボックスに置かれるように設定されます。つまり、ユーザーの介在なしで、SWF はこのサンドボックスに置かれます。このフラグは、Flash 8 で publish オプションを使用して、または、Local Content Updater* (macromedia.com から無償で入手できる SWF 後処理ユーティリティ) を使用して設定できます。
  • local-trusted : このサンドボックスに制限はありません。Flash Player 7 ですべてのローカルファイルに与えられたものと同じ open 権限が与えられます。あらゆるローカルファイルは、エンドユーザーによって "信頼される" ファイルとして登録されている場合に、このサンドボックスに置かれることが許可されます。この登録は次の 2 つの形式で、つまり、設定マネージャを使用して対話式に、または、ユーザーのコンピュータ上に Flash Player 構成ファイルを作成する実行可能なインストーラを使用して非対話式に行うことができます。

この時点で、ローカルセキュリティについて説明する付録の図表を確認すると、理解を深めるために役立ちます (ローカルセキュリティの図表に関するセクションを参照)。

ローカル SWF がインターネット (またはイントラネット HTTP サーバー) へのアクセスを必要とする場合、そのようなアクセスを許可にする 2 つのローカルサンドボックスがあります。local-with-networking サンドボックスの実装はより容易であり、必要な構成情報はすべて SWF と同じ場所に置かれるため便利です。local-trusted サンドボックスはより強力であり、より大きな権限を SWF に与えます。ただし、その実装は一般により難しく、必要な構成情報はすべて SWF と離れた場所に置かれます。ローカルセキュリティ規則の詳細について説明した後、この記事では、これら 2 つのサンドボックスのいずれを使用するかを決定する方法について説明します。

グローバル許可

Flash Player 8 では、ローカルファイルには無制限の許可が与えられなくなったため、Flash の各許可がローカルファイルに与えられる状況があります。これらの状況については、次のセクションで説明します。

一般に、Flash Player はローカルファイルに許可を与えるために "グローバル許可の原則" に従います。たとえば、リモート SWF が local-with-networking SWF による自らのスクリプティングを許可する場合は、System.security.allowDomain("*") を呼び出し、ロードされる他の SWF すべてに自らのスクリプティングを許可します。Flash Player には、ローカルファイルにのみ許可を与える方法は用意されていません。ファイルに許可を与える当事者は、"すべての" ファイルに許可を与えるしか方法がありません。これは、Flash Player がどのローカルファイルのソースも特定できないためです。ファイルのソースは任意の場所であることが考えられます。したがって妥当なのは、ファイルに許可を与える当事者がファイルのソースを心配する場合は、ローカルファイルによるアクションの実行を許可しないことです。

呼び出し元の SWF が機密情報を含んでいる場合は、System.security.allowDomain("*") を呼び出さないでください。また、セキュリティ問題を解決するためだけに、System.security.allowDomain("*") を呼び出さないでください。呼び出した場合は、該当するコンテンツに必要な保護が失われます。グローバル許可を与えるときは毎回、ある程度の時間をかけて結果について検討してください。