Flash Player クライアントランタイムのセキュリティモデルは、SWF ファイル、ローカルデータ、インターネット URL などのオブジェクトであるリソースに基づいて設計されています。「ステークホルダー」は、これらのリソースの所有者または使用者です。ステークホルダーはそのリソースを管理(セキュリティ設定)できます。また、各リソースにはステークホルダーが 4 つあります。次の図に示すように、Flash Player ではこれらの管理の権限階層が厳密に適用されます。
これは、例えば、管理者がリソースへのアクセスを制限した場合、他のステークホルダーはこの制限をオーバーライドすることはできないことを示します。
管理者、ユーザー、および Web サイトの管理については、以降のセクションで詳しく説明します。この章では、作成者(開発者)設定についても説明します。
コンピュータの管理ユーザー(管理者権限でログインするユーザー)は、そのコンピュータの全ユーザーに有効な Flash Player セキュリティ設定を適用できます。家庭用コンピュータなどのエンタープライズ環境以外では、通常は管理者権限も持つユーザーは 1 人です。エンタープライズ環境でも、個々のユーザーが管理者権限を持つ場合があります。
管理ユーザーの管理には次の 2 種類があります。
Mac OS X システムでは、mms.cfg ファイルは /Library/Application Support/Macromedia/mms.cfg にあります。Microsoft Windows システムでは、システムディレクトリの Macromedia Flash Player フォルダにあります(例えば、Windows XP または Windows Vista のデフォルトのインストールでは C:\windows\system32\macromed\flash\mms.cfg です)。
Flash Player が起動すると、このファイルからセキュリティ設定を読み取り、機能を制限するために使用します。
mms.cfg ファイルには、管理者が次のタスクを実行するために使用する設定が含まれます。
SWF ファイルは、Capabilities.avHardwareDisable プロパティおよび Capabilities.localFileReadDisable プロパティを呼び出すことにより、無効にされている機能に関する一部の情報にアクセスできます。しかし、mms.cfg ファイル内の設定のほとんどは、ActionScript からは照会できません。
コンピュータのセキュリティとプライバシーに関するセキュリティを、アプリケーションから独立して適用するには、システム管理者のみが mms.cfg ファイルを変更する必要があります。mms.cfg ファイルは、アプリケーションインストーラが使用するためのものではありません。管理権限を持って実行しているインストーラは mms.cfg ファイルの内容を変更できますが、Adobe では、そのような使用状況はユーザーの信頼を裏切るものであると考えており、インストーラの作成者に mms.cfg ファイルを決して変更しないように強く要請しています。
Global Flash Player Trust ディレクトリ
管理ユーザーおよびインストーラアプリケーションは、指定されたローカル SWF ファイルを信頼できるファイルとして登録できます。これらの SWF ファイルは、local-trusted サンドボックスに割り当てられます。割り当てられたファイルは、他の SWF ファイルと自由に通信し、リモートまたはローカルを問わずどこからでもデータをロードできます。ファイルは、Global Flash Player Trust ディレクトリで信頼できるファイルとして指定されます。このディレクトリは mms.cfg ファイルと同じディレクトリ内にあり、現在のユーザーに固有の次の場所にあります。
(例:C:\windows\system32\Macromed\Flash\FlashPlayerTrust)
(例:/Library/Application Support/Macromedia/FlashPlayerTrust)
Flash Player Trust ディレクトリには、任意の数のテキストファイルを格納でき、それぞれのファイルは、信頼できるパスを 1 行に 1 パスずつ示したリストです。1 つのパスを 1 つの SWF ファイル、HTML ファイル、またはディレクトリとすることもできます。コメント行は、# 記号で始まります。例えば、次のテキストが入っている Flash Player トラスト構成ファイルは、指定されたディレクトリとそのすべてのサブディレクトリにあるすべてのファイルに、信頼されている状態を付与します。
# Trust files in the following directories: C:\Documents and Settings\All Users\Documents\SampleApp
トラスト構成ファイル内に示されるパスは、常にローカルパスであるか SMB ネットワークパスであることが必要です。トラスト構成ファイル内の HTTP パスは、すべて無視されます。信頼できるのは、ローカルファイルだけです。
競合を避けるため、それぞれのトラスト構成ファイルにはインストールするアプリケーションに対応したファイル名を付け、.cfg のファイル拡張子を使用してください。
ローカルで実行する SWF ファイルをインストーラアプリケーションから配布する開発者は、インストーラアプリケーションに Global Flash Player Trust ディレクトリへ構成ファイルを追加させて、配布するファイルに対するすべての権限を付与することができます。インストーラアプリケーションは、管理者権限のあるユーザーが実行する必要があります。mms.cfg ファイルと異なり、Global Flash Player Trust ディレクトリはトラスト許可を付与するインストーラアプリケーションのために組み込まれています。管理ユーザーとインストーラアプリケーションは、どちらも Global Flash Player Trust ディレクトリを使用して、信頼できるローカルアプリケーションを指定できます。
個々のユーザー用の Flash Player Trust ディレクトリもあります。次のセクションのユーザーの管理を参照してください。
Flash Player には、権限を設定するための 3 つのユーザーレベルのメカニズム(設定 UI、設定マネージャ、および User Flash Player Trust ディレクトリ)があります。
設定 UI は、特定のドメインの設定をすばやくインタラクティブに行うメカニズムです。設定マネージャは、詳細なインターフェイスを提供し、多数またはすべてのドメインのアクセス許可を対象とするグローバルな変更を行う機能を備えています。また、SWF ファイルによって新しいアクセス許可が要求され、セキュリティやプライバシーに関する実行時決定が必要なとき、ユーザーが Flash Player 設定を調整できるダイアログボックスが表示されます。
設定マネージャおよび設定 UI には、次のセキュリティ関連のオプションがあります。
設定マネージャの詳細については、www.adobe.com/go/settingsmanager を参照してください。
User Flash Player Trust ディレクトリ
ユーザーおよびインストーラアプリケーションは、指定されたローカル SWF ファイルを信頼できるファイルとして登録できます。これらの SWF ファイルは、local-trusted サンドボックスに割り当てられます。割り当てられたファイルは、他の SWF ファイルと自由に通信し、リモートまたはローカルを問わずどこからでもデータをロードできます。ユーザーは、User Flash Player Trust ディレクトリでファイルを信頼できるファイルに指定します。このディレクトリは、Flash 共有オブジェクトの記憶領域と同じディレクトリ内にあり、現在のユーザーに固有の次の場所にあります。
(例:Windows XP では C:\Documents and Settings\JohnD\Application Data\Macromedia\Flash Player\#Security\FlashPlayerTrust、Windows Vista では C:\Users\JohnD\AppData\Roaming\Macromedia\Flash Player\#Security\FlashPlayerTrust)
(例:/Users/JohnD/Library/Preferences/Macromedia/Flash Player/#Security/FlashPlayerTrust)
この設定は、現在のユーザーだけに影響を及ぼし、コンピュータにログインする他のユーザーには影響を及ぼしません。管理者権限のないユーザーがシステムの独自部分にアプリケーションをインストールすると、インストーラは User Flash Player Trust ディレクトリで、アプリケーションをそのユーザーの信頼できるアプリケーションとして登録できます。
ローカルで実行する SWF ファイルをインストーラアプリケーションによって配布する開発者は、インストーラアプリケーションに User Flash Player Trust ディレクトリへ構成ファイルを追加させて、配布するファイルに対するすべての権限を付与することができます。この場合でも、User Flash Player Trust ディレクトリファイルは、管理ユーザーのアクション(インストール)によって開始されるため、管理ユーザーの管理と見なされます。
管理ユーザーまたはインストーラが、コンピュータの全ユーザー用にアプリケーションを登録するために使用する Global Flash Player Trust ディレクトリもあります(管理ユーザーの管理参照)。
Web サーバーにあるデータを他のドメインの SWF ファイルから利用できるようにするために、サーバー上にクロスドメインポリシーファイルを作成できます。「クロスドメインポリシーファイル」は XML ファイルであり、サーバーのデータとドキュメントをどのドメインの SWF ファイルが利用できるかを示すものです。特定のドメインのみを指定することも、すべてのドメインを指定することもできます。サーバーのポリシーファイルに指定されたドメインが提供する SWF ファイルであれば、サーバーのデータやアセットにアクセスすることができます。
クロスドメインポリシーファイルは、次のようなアセットへのアクセスに影響を及ぼします。
詳細は、この章の残りの部分で説明します。
次の例は、*.example.com、www.friendOfExample.com および 192.0.34.166 に置かれている SWF ファイルへのアクセスを許可するポリシーファイルを示しています。
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*.example.com" />
<allow-access-from domain="www.friendOfExample.com" />
<allow-access-from domain="192.0.34.166" />
</cross-domain-policy>
SWF ファイルが別のドメインのデータにアクセスしようとすると、Flash Player は自動的にそのドメインからポリシーファイルをロードしようとします。データをアクセスしようとしている SWF ファイルのドメインがポリシーファイルに含まれている場合、データへのアクセスが自動的に許可されます。
デフォルトでは、ポリシーファイルの名前は crossdomain.xml にし、ファイルはサーバーのルートディレクトリに置く必要があります。ただし、SWF ファイルは、Security.loadPolicyFile() メソッドを呼び出して、別の名前または別のディレクトリ内をチェックできます。クロスドメインポリシーファイルは、ロード元のディレクトリとその子ディレクトリにのみ、適用されます。したがって、ルートディレクトリのポリシーファイルはサーバー全体に適用されますが、任意のサブディレクトリからロードされたポリシーファイルは、そのディレクトリとそのサブディレクトリにのみ適用されます。
ポリシーファイルは、そのファイルが存在する特定のサーバーへのアクセスにのみ影響を及ぼします。例えば、https://www.adobe.com:8080/crossdomain.xml にあるポリシーファイルは、HTTPS 経由でポート 8080 から www.adobe.com に対して行われるデータロード呼び出しにのみ適用されます。
クロスドメインポリシーファイルには、<cross-domain-policy> タグが 1 つ含まれています。このタグには、<allow-access-from> タグが含まれている場合もあれば含まれていない場合もあります。各 <allow-access-from> タグには、domain という属性が 1 つ含まれています。この属性は、正確な IP アドレス、正確なドメイン、ワイルドカードドメイン(任意のドメイン)のいずれかを指定します。ワイルドカードドメインを指定するには、アスタリスク(*)1 つを使用するか、アスタリスクの後に接尾辞を続けます。前者はすべてのドメインとすべての IP アドレスを意味し、後者は指定の接尾辞で終わるドメインのみを意味します。接尾辞はドットで始める必要があります。ただし、この先頭のドットは検索には使用されません。ドットを除いた接尾辞に一致するドメインだけが検索されます。例えば、foo.com は *.foo.com の一部と見なされます。IP ドメインの指定にはワイルドカードを使用できません。
IP アドレスを指定した場合は、IP シンタックス (http://65.57.83.12/flashmovie.swf など) を使用してその IP アドレスからロードされた SWF ファイルにのみアクセスが付与されます。ドメイン名シンタックスを使用してロードされた SWF ファイルには付与されません。Flash Player は、DNS 解決を行いません。
次のように、すべてのドメインのドキュメントに対してアクセスを許可できます。
<?xml version="1.0"?> <!-- http://www.foo.com/crossdomain.xml --> <cross-domain-policy> <allow-access-from domain="*" /> </cross-domain-policy>
各 <allow-access-from> タグには、オプションで secure 属性を指定することもできます。この属性は、デフォルトで true に設定されています。ポリシーファイルが HTTPS サーバー上に置かれている場合に、非 HTTPS サーバー上の SWF ファイルが HTTPS サーバーからデータをロードすることを許可するには、この属性を false に設定します。
secure 属性を false に設定すると、HTTPS のセキュリティが影響を受けます。具体的には、この属性を false に設定することにより、セキュアなコンテンツがスヌープ攻撃やスプーフィング攻撃にさらされる可能性があります。secure 属性を false に設定しないことを強くお勧めします。
ロードするデータが HTTPS サーバー上にあり、それをロードする SWF ファイルが HTTP サーバー上にある場合は、セキュアなデータのすべてのコピーを HTTPS の保護下に置いておくことができるよう、ロードする SWF ファイルを HTTPS サーバーへ移動してください。しかし、ロードする SWF ファイルを HTTP サーバー上に置いておく必要があると判断した場合は、次のコードに示すように、secure="false" 属性を <allow-access-from> タグに追加します。
<allow-access-from domain="www.example.com" secure="false" />
ポリシーファイルに <allow-access-from> タグが 1 つも含まれていない場合は、サーバー上にポリシーファイルがないのと同じことになります。
ActionScript オブジェクトは、2 種類のサーバー接続(ドキュメントベースのサーバー接続とソケット接続)をインスタンス化します。Loader、Sound、URLLoader、URLStream のような ActionScript オブジェクトは、ドキュメントベースのサーバー接続をインスタンス化し、URL からファイルをロードします。ActionScript の Socket オブジェクトと XMLSocket オブジェクトはソケット接続を作成し、ロードされたドキュメントでなくストリーミングデータを処理します。Flash Player は 2 種類のポリシーファイル(ドキュメントベースのポリシーファイルとソケットポリシーファイル)をサポートします。ドキュメントベースの接続にはドキュメントベースのポリシーファイルが必要であり、ソケット接続にはソケットポリシーファイルが必要です。
Flash Player では、試みられている接続で使用するプロトコルと同じ種類のプロトコルを使用してポリシーファイルが伝送される必要があります。例えば、ポリシーファイルを HTTP サーバーに置いた場合、他のドメインの SWF ファイルは、その HTTP サーバーからデータをロードできます。しかし、同じサーバーでソケットポリシーファイルを提供しなければ、他のドメインの SWF ファイルはそのサーバーにソケットレベルで接続できなくなります。ソケットポリシーファイルを取得する手段は、接続の手段に一致する必要があります。
ソケットサーバーで提供するポリシーファイルのシンタックスは、他のポリシーファイルとほぼ同じですが、アクセスを許可するポートも指定する必要がある点が異なります。ポリシーファイルが 1024 未満のポート番号から提供される場合、任意のポートへのアクセスが許可されます。ポリシーファイルがポート 1024 以上のポートから提供される場合、1024 以上のポートへのアクセスのみが許可されます。許可するポートは、<allow-access-from> タグの to-ports 属性で指定します。指定できる値は、単一のポート番号、ポート範囲、およびワイルドカードです。
次に、XMLSocket ポリシーファイルの例を示します。
<cross-domain-policy> <allow-access-from domain="*" to-ports="507" /> <allow-access-from domain="*.example.com" to-ports="507,516" /> <allow-access-from domain="*.example2.com" to-ports="516-523" /> <allow-access-from domain="www.example2.com" to-ports="507,516-523" /> <allow-access-from domain="www.example3.com" to-ports="*" /> </cross-domain-policy>
ポリシーファイルが最初に Flash Player 6 に導入されたとき、ソケットポリシーファイルはサポートされていませんでした。ソケットサーバーへの接続は、ソケットサーバーと同じホストのポート 80 上にある HTTP サーバーのクロスドメインポリシーファイルのデフォルトの場所に置かれているポリシーファイルによって許可されていました。既存のサーバー配置を保存できるよう、Flash Player 9 では、この機能が引き続きサポートされています。しかし、現在の Flash Player はデフォルトで、ソケット接続と同じポート上のソケットポリシーファイルを取得します。HTTP ベースのポリシーファイルを使用してソケット接続を許可する場合は、次のようなコードを使用して HTTP ポリシーファイルを明示的に要求する必要があります。
Security.loadPolicyFile("http://socketServerHost.com/crossdomain.xml")
さらに、ソケット接続を許可するためには、HTTP ポリシーファイルがクロスドメインポリシーファイルのデフォルトの場所からのみ提供され、それ以外の HTTP の場所から提供されないようにする必要があります。HTTP サーバーから取得されたポリシーファイルは、ポート 1024 以上のすべてのポートへのアクセスを暗黙に許可します。HTTP ポリシーファイル内に to-ports 属性があっても、それは無視されます。
ソケットポリシーファイルの詳細については、ソケットへの接続を参照してください。
サーバーからのデータのロードまたはソケットへの接続は非同期操作であり、Flash Player は、単にクロスドメインポリシーファイルがダウンロードを終了するのを待ってから、主たる操作を開始します。しかし、イメージからのピクセルデータの抽出や、サウンドからのサンプルデータの抽出は同期操作です。したがって、データを抽出するためには、事前にクロスドメインポリシーファイルをロードしておく必要があります。メディアをロードするときは、クロスドメインポリシーファイルの有無をチェックするよう指定する必要があります。
これらのいずれかのパラメータを設定すると、Flash Player は最初に、既にそのドメイン用にダウンロードされたポリシーファイルがあるかどうかをチェックします。次に、Security.loadPolicyFile() メソッドへの保留中の呼び出しがスコープ内にあるかどうかを調べ、もしそうであれば、それらの呼び出しを待ちます。その後、サーバー上のデフォルトの場所にあるクロスドメインポリシーファイルを探します。
セキュリティ権限を付与するために使用される主な ActionScript API は、Security.allowDomain() メソッドで、これは、指定されたドメイン内の SWF ファイルに権限を付与します。次の例では、SWF ファイルは www.example.com ドメインに置かれた SWF ファイルへのアクセスを許可します。
Security.allowDomain("www.example.com")
このメソッドは、次の許可を付与します。
Security.allowDomain() メソッドを呼び出す主な目的は、外部ドメインにある SWF ファイルに、Security.allowDomain() メソッドを呼び出す SWF ファイルをスクリプトする許可を与えることです。詳細については、クロススクリプトを参照してください。
Security.allowDomain() メソッドにパラメータとして IP アドレスを指定しても、指定された IP アドレスに存在するすべてのアクセス元からのアクセスが許可されるわけではありません。許可されるのは、その IP アドレスに対応するドメイン名ではなく、URL として指定された IP アドレスを含むアクセス元からのアクセスだけです。例えば、ドメイン名 www.example.com が IP アドレス 192.0.34.166 に対応している場合、Security.allowDomain("192.0.34.166") の呼び出しでは www.example.com へのアクセスは許可されません。
ワイルドカード "*" を Security.allowDomain() メソッドに渡して、すべてのドメインからのアクセスを許可できます。"*" ワイルドカードは、「すべて」のドメインにある SWF ファイルに、呼び出しを行う SWF ファイルをスクリプトする許可を付与するので、使用に注意してください。
ActionScript には、Security.allowInsecureDomain() という第 2 の許可 API が組み込まれています。このメソッドは Security.allowDomain() メソッドとほとんど同じことをします。相違点は、セキュアな HTTPS 接続によってサービスされた SWF ファイルから呼び出された場合に、HTTP などのセキュアでないプロトコルからサービスされる他の SWF ファイルに、呼び出し側の SWF ファイルへのアクセスを追加的に許可することです。しかし、セキュアなプロトコル(HTTPS)からのファイルと、セキュアでないプロトコル(HTTP など)からのファイルの間でスクリプティングを許可することはセキュリティ上望ましくありません。そのようなことをすると、セキュアなコンテンツがスヌープ攻撃やスプーフィング攻撃にさらされる可能性があります。そのような攻撃が可能になる理由は、次のとおりです。Security.allowInsecureDomain() メソッドは、HTTP 接続によってサービスされる SWF ファイルがセキュアな HTTPS データにアクセスすることを許可するので、HTTP サーバーとユーザーの間に割り込んだ攻撃者は、HTTP の SWF ファイルを独自のものに置き換えることにより、HTTPS データにアクセスできます。
セキュリティに関連したもう 1 つの重要なメソッドは、Security.loadPolicyFile() です。このメソッドは、Flash Player に標準以外の場所にクロスドメインポリシーファイルがあるかどうかをチェックさせます。詳細については、Web サイトの管理(クロスドメインポリシーファイル)を参照してください。
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート