このセクションでは、SWF が置かれる各種のローカルサンドボックスについて説明します。
Flash Player では、ローカルファイルに対して次の権限が定義されます。
local-read。この権限は、local-with-filesystem の SWF に適用されます。local-with-networking の SWF には適用されません。この権限には、外部ファイルのデータを ActionScript 変数にロードする操作が含まれます。外部ファイルからロードされるデータは、ローカルファイルシステムに置かれています。ローカル URL フォームの例は、「影響を受けるコンテンツ」に示されています。影響を受けるデータロード操作は次のとおりです。
net-send。この権限は、local-with-networking の SWF に適用されます。local-with-filesystem の SWF には適用されません。この権限には、インターネット上の場所や HTTP サーバーにデータや要求を送信する操作が含まれます。非ローカル URL で使用する次の操作がすべて含まれます。
net-read。Local-with-networking の SWF で net-send 操作が実行される場合があります。一部の net-send 操作は一方向の操作となり、データを送信しますが応答は返されません。その他の net-send 操作では、要求が送信され、応答を受け取ります。後者の操作は "net-read" 操作と呼ばれ、net-send 操作のスーパーセットとなります。local-with-networking の SWF では、net-read 操作が試みられる場合がありますが、対象となるデータが置かれているドメインから許可を受ける必要があります。具体的には、非ローカル URL を使用する次の各操作になります。
SWF-HTML。この権限には、SWF ファイルが HTML ファイルをスクリプティングする操作、およびその逆の操作が含まれます。3 つのローカルサンドボックスのうち、信頼できるローカルファイルのみが SWF-HTML 権限を与えられます。これは、Flash Player のセキュリティモデルと Web ブラウザのセキュリティモデルが一致しない可能性があるためです。具体的には、次の各操作が含まれます。
SWF から HTML への操作:
fscommand
getURL("javascript:...")
ExternalInterface.call
HTML から SWF への操作:
JavaScript API* (SetVariable、GotoFrame など)
ExternalInterface.addCallback で確立されたコールバックの呼び出し
このサンドボックスには、UseNetwork フラグが含まれているローカル SWF が置かれます。このフラグはすべてのバージョンの SWF に含めることができますが、このフラグが機能するのは Flash Palyer 8 以降のみです。このフラグは、次のいずれかの方法で確立されます。
Flash 8 からパブリッシュする場合は、[パブリッシュ設定] ダイアログボックスの [Flash] タブの下部にある [ローカルでの再生に関するセキュリティ] オプションで、[ネットワークにのみアクセスする] を選択します (図 1 を参照)。
図 1 ローカル再生のセキュリティを [ネットワークにのみアクセスする] に設定する
UseNetwork フラグは、HTTP 経由でロードされた SWF には影響を与えません。これらの SWF は常にリモートサンドボックスに置かれます。また、信頼できる SWF としてユーザーが設定した SWF にも影響を与えません。信頼できる SWF は常に local-trusted サンドボックスに置かれます。UseNetwork フラグが影響を与えるのは、local-with-filesystem サンドボックスに置かれる SWF のみです。
ユーザーのローカル設定で信頼できるとされているローカルパスに該当するローカル SWF (または HTML ファイル) は、このサンドボックスに置かれます。個々のファイルのパスが信頼性があるとして設定される場合も、ディレクトリが信頼性があるとして設定される場合もあります。後者の場合、選択されている各ディレクトリおよびそのサブディレクトリ内のすべてのファイルが信頼性のあるファイルとなります。信頼できるかどうかの指定は、次の 2 つの方法で行うことができます。
設定マネージャ。ユーザーは、設定マネージャの [グローバルセキュリティ設定] パネルを使用して、リスト内の信頼できるパスを手動で追加、編集、または削除できます (図 2 を参照)。
図 2 Flash Player 設定マネージャでのセキュリティ設定
ユーザーは、このパネルの [常に確認]、[常に許可]、[常に拒否] オプションを使用して、Flash Player で古い SWF (バージョン 7 またはそれ以前の local-with-filesystem SWF) を処理する方法をグローバル設定することもできます。デフォルトの設定は [常に確認] で、許可されていない操作が行われると警告のダイアログボックスが表示されます。[常に許可] を選択すると、許可されない操作も実行されます。これは Flash Player 7 のデフォルト設定と同じです。ただし、この設定は、バージョン 8 以降の SWF に対しては機能しません。このオプションは、新しいローカルルールが作成される前に開発されたコンテンツのみを対象としたものです。[常に拒否] を選択すると、許可されていない操作はすべて失敗します。警告のダイアログボックスは表示されません。
メモ : [常に確認]、[常に許可]、[常に拒否] の各オプションの指定によって、ローカルセキュリティに関するプロンプト表示条件だけはでなく、Flash Player 7 から導入されたドメイン完全一致に関するプロンプト表示条件も決定されます。
FlashPlayerTrust 設定ファイル。信頼性のあるパスのリストが記載されたシンプルテキストファイルであり、実行可能なインストーラプログラムによって作成されることを前提とするファイルです。インストーラが SWF をユーザーのコンピュータにインストールするときには、それらの SWF が信頼性のある SWF であることを示す設定ファイルをインストールできます。この動作は、ユーザーがそれらの SWF を信頼できると明示的に決定することを表すものではありません。しかし、ユーザーは、インストーラプログラムを実行することによって、実行可能プログラムであるインストーラプログラムを暗黙的に信頼したことになります。Flash Player では、信頼設定ファイルが 2 つの場所で認識されます。1 つはそのコンピュータのすべてのユーザーに影響を与える場所であり、もう 1 つは現在のユーザーのみに影響を与える場所です。すべてのユーザーに影響を与える場所は、OS レベルで管理者権限が必要とされる次の場所になります。
Windows のすべてのユーザー :
<system>\Macromed\Flash\FlashPlayerTrust
(例 : c:\WINNT\system32\Macromed\Flash\FlashPlayerTrust)
Windows シングルユーザー :
<app data>\Macromedia\Flash Player\#Security\FlashPlayerTrust
(例 : c:\Documents and Settings\fred\Application Data\Macromedia\Flash Player\#Security\FlashPlayerTrust)
Macintosh のすべてのユーザー :
<app support>/Macromedia/FlashPlayerTrust
(例 : /Library/Application Support/Macromedia/FlashPlayerTrust)
Macintosh シングルユーザー :
<app data>/Macromedia/Flash Player/#Security/FlashPlayerTrust
(例 : /Users/fred/Library/Preferences/Macromedia/Flash Player/#Security/FlashPlayerTrust)
上記の場所はすべてディレクトリであり、個々のファイルではありません。これらのディレクトリには複数の設定ファイルがインストールされている場合があります。Flash Player では、これらのディレクトリ内に見つかったすべてのファイルを読み取ります。設定ファイルは FlashPlayerTrust のサブディレクトリには置くことができません。FlashPlayerTrust ディレクトリの直下に置く必要があります。個々の設定ファイルには任意の名前を付けることができますが、名前の競合を防ぐため、インストーラでは、対応する製品に固有の名前となるような名前が付けられます。システムによっては FlashPlayerTrust ディレクトリが存在しない場合があります。この場合は、インストーラで FlashPlayerTrust ディレクトリを作成する必要があります。
これらのファイルの構文は単純で、任意の数のローカルパスが、1 行ごとに分かれて記述されます。空白や空白行も許可されます。コメントは、先頭に # 文字を付けて記述され、行の末尾に置かれます。空白を含むパスを引用符で囲むと問題が発生するため、引用符を使用する必要はありません。
これらのファイルに記述されるファイルシステムパスには、コンピュータによっては非 ASCII 文字が含まれる場合があります。このため、FlashPlayerTrust ファイルで使用されるテキストエンコーディングが重要な意味を持ちます。Flash Player は、これらのファイルの冒頭で Unicode のバイト順マーク文字を調べ、UTF-8 および UTF-16 バイト順マークを検出すると、ファイルの残りを UTF-8 または UTF-16 として処理します。たとえば、Windows のメモ帳や Macintosh の TextEdit では、これらのバイト順マーク文字を含む Unicode テキストファイルを記述できます。また、その他多くのテキストエディタでも、同様に記述できます。Flash Player が FlashPlayerTrust ファイルの冒頭でバイト順マーク文字を検出できなかった場合は、コンピュータの現在の "コードページ" (デフォルトのローカルエンコーディング) を使用してファイルを解釈します。
通常、サンドボックスに配置されるのは SWF ファイルですが、Flash Player では、SWF ファイルと HTML ファイルの相互作用を制御するため、HTML ファイルもサンドボックスに配置されます。ローカル HTML ファイルには、信頼性のあるファイル用のサンドボックスと、信頼性のないファイル用のサンドボックスの 2 つのサンドボックスがあります。ローカル HTML ファイルは、デフォルトでは信頼性のないファイルに分類されますが、SWF ファイルの場合と同様の方法で、信頼性のあるファイルに指定できます。ローカル HTML ファイルのサンドボックスが意味を持つのは、Flash Player JavaScript API など、HTML から SWF へのスクリプティングの場合のみです。
SWF がそのサンドボックスの種類を判別する際には、次の読み取り専用 ActionScript プロパティが使用されます。
このプロパティには、次の 4 つのストリング値のいずれかが指定されます。
local-with-filesystem サンドボックス内の SWF は、local-read 操作を行うことはありますが、net-send 操作や SWF-HTML 操作は行いません。
Flash Player のデバッグバージョンを使用し、Macromedia Flash のデバッガに接続している場合は、このサンドボックス内の SWF が許可されていない操作を試みるたびに、操作の失敗を通知する診断メッセージが [出力] パネルに表示されます。
このサンドボックス内にあるパブリッシュバージョン 7 またはそれ以前の SWF の再生中に、その SWF が許可されない操作を試みると、セキュリティ警告のダイアログボックスが表示され、Flash Player 8 のローカルセキュリティ規則の変更により、コンテンツの操作が停止されたことが通知されます。
図 3 操作が停止されたことを通知するセキュリティ警告のダイアログボックス
このダイアログボックスは、アプリケーションが実行されるたびに、1 回だけ表示されます。その後、許可されない操作が行われても、このダイアログボックスは表示されずに操作が失敗します。
このダイアログボックスでユーザーがどのような処理を行っても、試みられた操作は失敗します。だだし、ユーザーが [設定] ボタンをクリックすると、新しいウィンドウが開き、設定マネージャが表示されます。設定マネージャでは、許可されない操作を試みたローカルコンテンツを信頼性のあるコンテンツに指定することができます。図 2 の Flash Player 設定マネージャが表示されてから短時間のうちに [追加] コマンドを選択すると、許可されない操作を試みたローカル SWF のパスがヒントに表示されます (図 4 を参照)。
図 4 信頼される場所を "ヒント" プロンプトで指定
表示されたパスを [このサイトを信頼する] テキストボックスにコピーして、ダイアログボックスが表示されるきっかけとなった個々の SWF ファイルを信頼性のあるファイルに指定することができます。この処理で十分な場合もありますが、アプリケーションが複数のファイルで構成されているために、意図した操作を行うには複数のファイルを信頼性のあるファイルに指定することが必要な場合もあります。後述の連携するメディアに関するセクションを参照してください。このように、ユーザーは、複数のファイルを信頼性のあるファイルに指定するか、ダイアログボックスが表示されるきっかけとなった SWF ファイルが置かれているディレクトリ全体を信頼性のあるディレクトリに指定する必要があります。
設定マネージャで設定を変更した場合は、変更内容を有効にするために、元のアプリケーションを再起動する必要があります。通常は、ブラウザを最新表示にすることによってこれを行います。
設定マネージャの [グローバルセキュリティ設定] パネルの周囲に表示されるテキストで、上記のワークフローがエンドユーザー向けに説明されます。また、テクニカルノート「How Do I Let Local Flash Content Communicate with the Internet?*」で、ローカルコンテンツを信頼性のあるコンテンツに指定する手順を参照することもできます。
エンドユーザー向けにローカルセキュリティ警告のダイアログボックスが表示されるのは、バージョン 7 またはそれ以前の SWF についてのみです。このダイアログボックスは、新しいローカルセキュリティ規則によって影響を受ける、Flash 8 より前のコンテンツをユーザーが修正できるようにするためのものです。
しかし、Flash コンテンツの作成者は、このセキュリティ警告のダイアログボックスによって失敗の原因を知ることができます。ローカルセキュリティ規則で禁止されている操作を SWF が試みた場合は、SWF ファイルのバージョンに関わらずすぐに通知される方が便利な場合もあります。
このため、Macromedia Flash 8 をはじめとする各種の Macromedia オーサリングツールでは、"FlashAuthor.cfg" というファイルがインストールされます。このファイルは、すべてのバージョンの local-with-filesystem SWF によって試みられる許可されない操作に対して警告のダイアログボックスを表示するように、Flash Player に指示します。すべてのユーザーが、このファイルを自分で作成することができます。このファイルは、FlashPlayerTrust ディレクトリと同じ場所にある 2 つの場所のいずれかに置くことができます。
Windows のすべてのユーザー :
<system>\Macromed\Flash\FlashAuthor.cfg
(例 : c:\WINNT\system32\Macromed\Flash\FlashAuthor.cfg)
Windows シングルユーザー :
<app data>\Macromedia\Flash Player\#Security\FlashAuthor.cfg
(例 : c:\Documents and Settings\fred\Application Data\Macromedia\Flash Player\#Security\FlashAuthor.cfg)
Macintosh のすべてのユーザー :
<app support>/Macromedia/FlashAuthor.cfg
(例 : /Library/Application Support/Macromedia/FlashAuthor.cfg)
Macintosh シングルユーザー :
<app data>/Macromedia/Flash Player/#Security/FlashAuthor.cfg
(例 : /Users/fred/Library/Preferences/Macromedia/Flash Player/#Security/FlashAuthor.cfg)
このファイルで現在認識されるのは次つのディレクティブのみです。
LocalSecurityPrompt=Author
このディレクティブは、Flash Player が図 3 のダイアログボックスを表示するかどうかを判断する際に、SWF のバージョンを無視するように指示します。
"FlashAuthor.cfg" ファイルには、空白を含めたり、# 文字で始まるコメントを行の末尾に置いたりすることができます。
ローカルファイルとして再生する SWF コンテンツを作成する場合、LocalSecurityPrompt=Author ディレクティブを使用すると Flash Player でエンドユーザーの操作を完全にシミュレーションすることができないため、このディレクティブは使用しないでください。作成者指定の動作を無効にするには、"FlashAuthor.cfg" のコンテンツを上記の LocalSecurityPrompt=Author 以外に変更します。たとえば、上の行をコメントアウトするか、次に示すようにわかりやすいものに変更します。
LocalSecurityPrompt=User
Macromedia Flash 8 では、"FlashAuthor.cfg" をすべてのユーザー用とシングルユーザー用の両方の場所にインストールします。2 つの場所に "FlashAuthor.cfg" が存在する場合、Flash Player ではシングルユーザー用の場所にあるファイルが優先されます。このため、ファイルを編集する際には必ずシングルユーザーの場所にあるファイルを編集してください。
local-with-networking サンドボックス内の SWF は、net-send 操作を行うことはありますが、local-read 操作や SWF-HTML 操作を行うことはありません。
Flash Player のデバッグバージョンを使用し、Flash のデバッガに接続している場合は、このサンドボックス内の SWF が許可されていない操作を試みるたびに、操作の失敗を通知する診断メッセージが [出力] パネルに表示されます。
ローカルセキュリティ規則の変更前にコンテンツが作成され、Local with Networking サンドボックスに置かれたという状況はありえないため、このサンドボックス内の SWF によってセキュリティ警告のダイアログボックスが表示されることはありません。許可されない操作が失敗した場合、エンドユーザーに警告のダイアログボックスは表示されません。
local-with-networking の SWF で net-send 操作が実行される場合があります。一部の net-send 操作は一方向の操作となり、データを送信しますが応答は返されません。その他の net-send 操作では、要求が送信され、応答を受け取ります。後者の操作は "net-read" 操作と呼ばれ、net-send 操作のスーパーセットとなります。net-read 操作の例としては、XML.load("http://mysite.com/data/schedule.xml") があります。local-with-networking SWF は、net-read 操作を試みることができます。しかし、Flash Player のグローバル許可の原則に基づき、local-with-networking SWF が指定のドメインからデータをロードするには、すべてのドメインが関連データを読み取ることを許可する <allow-access-from domain="*" /> が記述されたポリシーファイルが、そのドメインに対して設定されていることが必要です。上記の例では、mysite.com でポリシーファイルがデフォルトの場所 (http://mysite.com/crossdomain.xml) または該当するデータの隣 (http://mysite.com/data/crossdomain.xml) に置かれている必要があります。後者の場合、デフォルトでない場所にポリシーファイルが置かれていることを Flash Player に伝えるために、SWF のロードで次の呼び出しが必要となります。
System.security.loadPolicyFile("http://mysite.com/data/crossdomain.xml")