セキュリティサンドボックス

Flash Player 9 以降、Adobe AIR 1.0 以降

クライアントコンピューターは、外部 Web サイト、ローカルファイルシステム、インストールされた AIR アプリケーションなどの様々なソースから、コード、コンテンツおよびデータが含まれている個々のファイルを取得できます。Flash Player および AIR ランタイムでは、コードファイルやその他のリソース(共有オブジェクト、ビットマップ、サウンド、ビデオ、データファイルなど)がロードされると、それらを元の場所に基づいてセキュリティサンドボックスに個別に割り当てます。次の節では、ランタイムで適用される規則について説明します。これらの規則は、任意のサンドボックス内で実行するコードやコンテンツがアクセスできるものを管理します。

Flash Player のセキュリティについて詳しくは、Flash Player デベロッパーセンターの「セキュリティ」トピック(www.adobe.com/go/devnet_security_jp)を参照してください。

リモートサンドボックス

Flash Player および AIR ランタイムでは、インターネットのアセット(SWF ファイルを含む)を元のドメインに対応する個別のサンドボックスに分類します。例えば、example.com からロードされたアセットは、foo.org からロードされたアセットとは異なるセキュリティサンドボックスに配置されます。デフォルトでは、それらのファイルは、それら自体のサーバーにあるリソースへのアクセスを許可されています。 リモート SWF ファイルは、URL ポリシーファイル、Security.allowDomain() メソッドなどの Web サイトおよび作成者の明示的な許可によって、他のドメインのその他のデータにアクセスできます。詳しくは、Web サイトのコントロール(ポリシーファイル)作成者(開発者)コントロールを参照してください。

リモート SWF ファイルは、ローカルファイルまたはローカルリソースをロードできません。

Flash Player のセキュリティについて詳しくは、Flash Player デベロッパーセンターの「セキュリティ」トピック(www.adobe.com/go/devnet_security_jp)を参照してください。

ローカルサンドボックス

ローカルファイルとは、file: プロトコルまたは UNC(Universal Naming Convention)パスを使用して参照されるすべてのファイルを表しています。ローカル SWF ファイルは、次の 4 つのローカルサンドボックスのいずれかに配置されます。

  • local-with-filesystem サンドボックス - セキュリティを目的として、Flash Player および AIR ランタイムは、デフォルトで、すべてのローカルファイルを local-with-file-system サンドボックスに配置します。このサンドボックスから、実行可能コードは(例えば、URLLoader クラスを使用して)ローカルファイルを読み取ることはできますが、ネットワークとの通信はできません。その結果、ローカルデータがネットワークに漏れ出したり、不正に共有されたりすることがなくなります。

  • local-with-networking サンドボックス - SWF ファイルをコンパイルする際に、ローカルファイルとして実行される場合、ネットワークアクセスの許可を指定できます(ローカル SWF ファイルのサンドボックスタイプの設定を参照)。これらのファイルは local-with-networking サンドボックスに配置されます。SWF ファイルが local-with-networking サンドボックスに割り当てられると、ローカルファイルへのアクセス権が失われます。 代わりに、SWF ファイルはネットワークのデータにアクセスできるようになります。 しかし、local-with-networking SWF ファイルは、そのための許可を得ない限り、URL ポリシーファイルを使用するか、Security.allowDomain() メソッドの呼び出しを使用してネットワークからのデータを読み取ることはできません。そのような許可を付与するには、<allow-access-from domain="*"/> または Security.allowDomain("*") を使用して、URL ポリシーファイルですべてのドメインに許可を付与する必要があります。詳しくは、Web サイトのコントロール(ポリシーファイル)および作成者(開発者)コントロールを参照してください。

  • local-trusted サンドボックス —(ユーザーまたはインストーラープログラムによって)信頼できるファイルとして登録されたローカル SWF ファイルは、local-trusted サンドボックスに配置されます。システム管理者とユーザーは、セキュリティ上の配慮に基づき、local-trusted サンドボックス間でローカル SWF ファイルの再割り当て(移動)も実行できます(管理ユーザーのコントロールおよびユーザーのコントロールを参照)。local-trusted サンドボックスに割り当てられた SWF ファイルは、他の SWF ファイルと自由に通信したり、どこからでも(リモートでもローカルでも)データをロードしたりすることができます。

  • AIR アプリケーションサンドボックス — このサンドボックスには、実行中の AIR アプリケショーンと一緒にインストールされたコンテンツが含まれます。デフォルトでは、AIR アプリケーションサンドボックスで実行するコードは、任意のドメインのコードをクロススクリプトできます。ただし、AIR アプリケーションサンドボックス外部にあるファイルからは、アプリケーションサンドボックス内のコードをクロススクリプトできません。デフォルトでは、AIR アプリケーションサンドボックスのコードとコンテンツは、任意のドメインからコンテンツおよびデータをロードできます。

local-with-networking サンドボックスと local-with-filesystem サンドボックスの間の通信は、local-with-filesystem サンドボックスとリモートサンドボックスの間の通信と同様に、厳しく禁じられています。 そのような通信を可能にする許可を、Flash Player で実行中のアプリケーションまたはユーザーや管理者が付与することはできません。

ローカル HTML ファイルとローカル SWF ファイル間の一方向のみのスクリプト — 例えば、ExternalInterface クラスを使用するには、HTML と SWF の両ファイルを local-trusted サンドボックスに配置する必要があります。その理由は、ブラウザーのローカルセキュリティモデルが Flash Player のローカルセキュリティモデルと異なるからです。

local-with-networking サンドボックス内の SWF ファイルは、local-with-filesystem サンドボックス内の SWF ファイルをロードできません。 local-with-filesystem サンドボックス内の SWF ファイルは、local-with-networking サンドボックス内の SWF ファイルをロードできません。

AIR アプリケーションサンドボックス

Adobe AIR ランタイムでは、「アプリケーション」サンドボックスと呼ばれるサンドボックスが Flash Player セキュリティサンドボックスモデルに追加されます。AIR アプリケーションの一部としてインストールされたファイルは、アプリケーションサンドボックスにロードされます。アプリケーションがロードするその他のファイルには、通常の Flash Player セキュリティモデルで指定されているセキュリティ制限が適用されます。

アプリケーションがインストールされると、AIR パッケージに含まれているすべてのファイルがユーザーのコンピューターのアプリケーションディレクトリにインストールされます。開発者は、app:/ URL スキームを使用してコード内でこのディレクトリを参照できます(URI スキームを参照)。アプリケーションの実行時にアプリケーションディレクトリツリー内のすべてのファイルがアプリケーションサンドボックスに割り当てられます。 アプリケーションサンドボックス内のコンテンツには、ローカルファイルシステムとのやり取りを含め、AIR アプリケーションで使用できる完全な権限が与えられます。

AIR アプリケーションの多くは、ローカルにインストールされたこれらのファイルのみを使用してアプリケーションを実行します。ただし、AIR アプリケーションがアプリケーションディレクトリ内のファイルだけに制限されるわけではなく、どのソースのどの種類のファイルでも読み込むことができます。これにはユーザーのコンピューターのローカルファイルだけでなく、ローカルネットワークやインターネットなど使用可能な外部ソースのファイルも含まれます。ファイルの種類はセキュリティ制限に影響しません。読み込まれた HTML ファイルは、同じソースから読み込まれた SWF ファイルと同じセキュリティ権限を持ちます。

アプリケーションセキュリティサンドボックス内のコンテンツは、他のサンドボックス内のコンテンツでは使用できない AIR API にアクセスできます。例えば、アプリケーションのアプリケーション記述ファイルのコンテンツを返す air.NativeApplication.nativeApplication.applicationDescriptor プロパティは、アプリケーションセキュリティサンドボックス内のコンテンツに制限されます。制限される API のもう 1 つの例として FileStream クラスがあります。このクラスにはローカルファイルシステムに対して読み取りと書き込みを行うためのメソッドが含まれています。

アプリケーションセキュリティサンドボックス内のコンテンツでのみ使用可能な ActionScript API は、『Adobe Flash Platform 用 ActionScript 3.0 リファレンスガイド』に AIR のロゴ付きで示されています。これらの API を他のサンドボックスで使用すると、ランタイムから SecurityError 例外がスローされます。

HTML コンテンツ(HTMLLoader オブジェクト内)の場合、すべての AIR JavaScript API (AIRAliases.js ファイルを使用するときに、window.runtime プロパティまたは air オブジェクトを通じて使用できる API)は、アプリケーションセキュリティサンドボックス内のコンテンツで使用できます。別のサンドボックス内の HTML コンテンツは window.runtime プロパティにアクセスできないので、AIR API または Flash Player API にアクセスできません。

AIR アプリケーションサンドボックス内で実行するコンテンツには、次に示す追加の制限があります。

  • アプリケーションセキュリティサンドボックス内の HTML コンテンツの場合、コードの読み込み後にストリングを実行可能コードに動的変換できる API の使用について制限があります。これは、アプリケーションで、アプリケーション以外のソース(潜在的に安全でないネットワークドメインなど)から誤ってコードを挿入(および実行)されないようにするための制限です。例えば、eval() 関数の使用には制限があります。詳しくは、異なるサンドボックス内のコンテンツに対するコードの制限を参照してください。

  • フィッシング攻撃を回避するために、ActionScript の TextField オブジェクト内の HTML コンテンツの img タグは、アプリケーションセキュリティサンドボックス内の SWF コンテンツでは無視されます。

  • アプリケーションサンドボックス内のコンテンツは、ActionScript 2.0 テキストフィールドの HTML コンテンツの asfunction プロトコルを使用できません。

  • アプリケーションサンドボックス内の SWF コンテンツは、Flash Player 9 アップデート 3 に追加されたクロスドメインキャッシュ機能を使用できません。この機能を使用すると、Flash Player は Adobe プラットフォームコンポーネントのコンテンツを永続的にキャッシュし、そのコンテンツを読み込んだ SWF コンテンツでオンデマンドに再利用できます(コンテンツを何度も読み込む必要がありません)。

AIR における JavaScript の制限

アプリケーションセキュリティサンドボックスのコンテンツとは異なり、非アプリケーションセキュリティサンドボックスの JavaScript コンテンツは、eval() 関数を呼び出して、動的に生成されたコードをいつでも実行できます。ただし、AIR の非アプリケーションセキュリティサンドボックス内で実行する JavaScript には制限があります。以下の制限があります。

  • 非アプリケーションサンドボックス内の JavaScript コードは、window.runtime オブジェクトにアクセスできないので、AIR API を実行できません。

  • デフォルトでは、非アプリケーションセキュリティサンドボックス内のコンテンツは、XMLHttpRequest 呼び出しを使用して、その呼び出しを行っているドメイン以外のドメインからデータを読み込むことができません。ただし、コンテンツに含まれるフレームまたはインラインフレームの allowCrossdomainXHR 属性を設定することにより、非アプリケーションコンテンツの権限をアプリケーションコードから付与してこの処理を行うことができます。詳しくは、異なるサンドボックス内のコンテンツに対するコードの制限を参照してください。

  • JavaScript の window.open() メソッドの呼び出しには制限があります。詳しくは、JavaScript window.open() メソッドの呼び出しに関する制限を参照してください。

  • リモート(ネットワーク)セキュリティサンドボックス内の HTML コンテンツは、CSS、frameiframe および img エレメントをリモートドメイン(ネットワーク URL)からのみ読み取ります。

  • local-with-filesystem、local-with-networking または local-trusted サンドボックス内の HTML コンテンツは、CSS、frameiframe および img エレメントをローカルサンドボックス(アプリケーションまたはネットワーク URL 以外から)からのみ読み込みます。

詳しくは、異なるサンドボックス内のコンテンツに対するコードの制限を参照してください。

ローカル SWF ファイルのサンドボックスタイプの設定

コンピューターのエンドユーザーまたは管理者は、ローカル SWF ファイルが信頼できることを指定し、ローカルおよびネットワークの他のドメインからデータをロードできるようにすることができます。 これは、Global Flash Player Trust ディレクトリおよび User Flash Player Trust ディレクトリで指定します。 詳しくは、管理ユーザーのコントロールおよびユーザーのコントロールを参照してください。

ローカルサンドボックスについて詳しくは、ローカルサンドボックスを参照してください。

Adobe Flash Professional

local-with-filesystem サンドボックスまたは local-with-networking サンドボックス用の SWF ファイルを構成できます。そのためには、オーサリングツールでドキュメントのパブリッシュ設定を設定します。

Adobe Flex

local-with-filesystem サンドボックスまたは local-with-networking サンドボックス用の SWF ファイルを構成できます。そのためには、Adobe Flex コンパイラーで use-network フラグを設定します。詳しくは、Flex 3 アプリケーションの構築と展開の「アプリケーションコンパイラーのオプションについて」を参照してください。

Security.sandboxType プロパティ

SWF ファイルの作成者は、読み取り専用の静的プロパティ Security.sandboxType を使用して、Flash Player または AIR ランタイムによって SWF ファイルが割り当てられたサンドボックスのタイプを特定できます。Security クラスは、Security.sandboxType プロパティに指定できる値を表す次のような定数を含んでいます。

  • Security.REMOTE - SWF ファイルはインターネット URL からダウンロードされ、ドメインベースのサンドボックスルールに従って機能します。

  • Security.LOCAL_WITH_FILE - SWF ファイルはローカルファイルですが、ユーザーの信頼性はなく、ネットワークを指定してパブリッシュされているわけではありません。この SWF ファイルはローカルデータソースからの読み取りはできますが、インターネットとの通信はできません。

  • Security.LOCAL_WITH_NETWORK - SWF ファイルはローカルファイルであり、ユーザーの信頼性はありませんが、ネットワークを指定してパブリッシュされています。この SWF ファイルはインターネットとのやり取りはできますが、ローカルデータソースからの読み取りはできません。

  • Security.LOCAL_TRUSTED - SWF ファイルはローカルファイルであり、ユーザーの信頼性があり、設定マネージャーまたは Flash Player トラスト構成ファイルを使用します。ローカルのデータソースから読み取ることも、インターネットでやり取りすることもできます。

  • Security.APPLICATION - このファイルは AIR アプリケーションで実行され、そのアプリケーションのパッケージ(AIR ファイル)と共にインストールされます。デフォルトでは、AIR アプリケーションサンドボックスのファイルは、任意のドメインのファイルをクロススクリプトできます。ただし、AIR アプリケーションサンドボックス外部にあるファイルからは、AIR ファイルをクロススクリプトできません。デフォルトでは、AIR アプリケーションサンドボックスのファイルは、任意のドメインからコンテンツおよびデータをロードできます。