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 形式の例を次に示します。
Flash Player にはいくつかの異なるタイプがあり、各タイプの Flash Player はそれぞれの環境で影響を受けます。
Flash Player 8 では、すべての SWF (および SWF-HTML スクリプティング目的の HTML ファイル) は次の 4 タイプのサンドボックスのいずれかに置かれます。
この時点で、ローカルセキュリティについて説明する付録の図表を確認すると、理解を深めるために役立ちます (ローカルセキュリティの図表に関するセクションを参照)。
ローカル 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("*") を呼び出さないでください。呼び出した場合は、該当するコンテンツに必要な保護が失われます。グローバル許可を与えるときは毎回、ある程度の時間をかけて結果について検討してください。