Flash CS3 ドキュメンテーション |
|||
| ActionScript 3.0 のプログラミング > Flash Player セキュリティ > アクセス許可管理の概要 | |||
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 のデフォルトのインストールでは C:¥windows¥system32¥macromed¥flash¥mms.cfg です)。
Flash Player が起動すると、このファイルからセキュリティ設定を読み取り、機能を制限するために使用します。
mms.cfg ファイルには、管理者が次のタスクを実行するために使用する設定が含まれます。
SWF ファイルは、Capabilities.avHardwareDisable および Capabilities.localFileReadDisable プロパティを呼び出すことにより、無効にされている機能に関する一部の情報にアクセスできます。ただし、mms.cfg ファイルのほとんどの設定は、AcrionScript から照会できません。
コンピュータのセキュリティとプライバシーに関するセキュリティを、アプリケーションから独立して適用するには、システム管理者のみが mms.cfg ファイルを変更する必要があります。mms.cfg ファイルは、アプリケーションインストーラが使用するためのものではありません。管理権限を持って実行しているインストーラは mms.cfg ファイルの内容を変更できますが、アドビ システムズ社では、そのような使用状況はユーザーの信頼を裏切るものであると考えており、インストーラの作成者に "mms.cfg" ファイルを決して変更しないように強く要請しています。
管理ユーザーおよびインストーラアプリケーションは、指定されたローカル 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 には、次のセキュリティ関連のオプションがあります。
|
メモ |
|
mms.cfg ファイルで行われる設定は (管理ユーザー制御を参照)、設定マネージャに反映されません。 |
設定マネージャの詳細については、www.adobe.com/go/settingsmanager_jp を参照してください。
ユーザーおよびインストーラアプリケーションは、指定されたローカル SWF ファイルを信頼できるファイルとして登録できます。これらの SWF ファイルは、local-trusted サンドボックスに割り当てられます。割り当てられたファイルは、他の SWF ファイルと自由に通信し、リモートまたはローカルを問わずどこからでもデータをロードできます。ユーザーは、User Flash Player Trust ディレクトリでファイルを信頼できるファイルに指定します。このディレクトリは、Flash 共有オブジェクトの記憶領域と同じディレクトリ内にあり、現在のユーザーに固有の次の場所にあります。
(例 : C:¥Documents and Settings¥JohnD¥Application Data¥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> タグを含まないポリシーファイルは、サーバーにポリシーが設定されていない場合と同じ効果があります。
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 は、単にクロスドメインポリシーファイルがダウンロードを終了するのを待ってから、主たる操作を開始します。ただし、イメージからのピクセルデータの抽出またはサウンドからのサンプルデータの抽出は、同期操作です。クロスドメインポリシーファイルをロードしなければ、データを抽出できません。メディアをロードするときは、クロスドメインポリシーファイルの有無をチェックするよう指定する必要があります。
Loader.load() メソッドを使用する場合、LoaderContext オブジェクトである context パラメータの checkPolicyFile プロパティを設定します。<img> タグを使用してテキストフィールドにイメージを埋め込むときは、<img checkPolicyFile = "true" src = "example.jpg"> のように、<img> タグの checkPolicyFile 属性を "true" に設定します。Sound.load() メソッドを使用する場合、SoundLoaderContext オブジェクトである context パラメータの checkPolicyFile プロパティを設定します。checkPolicyFile プロパティを設定します。これらのいずれかのパラメータを設定すると、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 サイトの管理 (クロスドメインポリシーファイル)を参照してください。
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート
現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000349.html