| パッケージ | flash.system |
| クラス | public final class Security |
| 継承 | Security Object |
| 言語バージョン : | ActionScript 3.0 |
| Player のバージョン : | Flash Player 9 |
関連項目
| プロパティ | 定義元 | ||
|---|---|---|---|
![]() | constructor : Object
特定のオブジェクトインスタンスのクラスオブジェクトまたはコンストラクタ関数への参照です。
| Object | |
| exactSettings : Boolean
[static]
特定の Flash Player 設定に使用するドメインを Flash Player がどのように選択するかを指定します。設定には、カメラとマイクの許可、記憶領域の割り当て、永続共有オブジェクトの記憶領域などがあります。
| Security | ||
![]() | prototype : Object
[static]
クラスまたは関数オブジェクトのプロトタイプオブジェクトへの参照です。
| Object | |
| sandboxType : String
[static] [read-only]
呼び出し元の SWF ファイルが動作しているセキュリティサンドボックスのタイプを示します。
| Security | ||
| メソッド | 定義元 | ||
|---|---|---|---|
|
[static]
指定されたドメインの SWF ファイルおよび HTML ファイルが、allowDomain() 呼び出しを含む SWF ファイルのオブジェクトおよび変数にアクセスすることを許可します。
| Security | ||
|
[static]
指定したドメイン内の SWF ファイルおよび HTML ファイルが、HTTPS プロトコルでホストされた呼び出し元 SWF ファイルのオブジェクトと変数にアクセスすることを許可します。
| Security | ||
![]() |
オブジェクトに指定されたプロパティが定義されているかどうかを示します。
| Object | |
![]() |
Object クラスのインスタンスが、パラメータとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。
| Object | |
|
[static]
url パラメータで指定された場所からドメイン間ポリシーファイルをロードします。
| Security | ||
![]() |
指定されたプロパティが存在し列挙できるかどうかを示します。
| Object | |
![]() |
ループ処理に対するダイナミックプロパティの可用性を設定します。
| Object | |
|
[static]
Flash Player の [セキュリティ設定] パネルを表示します。
| Security | ||
![]() |
指定されたオブジェクトのストリング表現を返します。
| Object | |
![]() |
指定されたオブジェクトのプリミティブな値を返します。
| Object | |
| 定数 | 定義元 | ||
|---|---|---|---|
| LOCAL_TRUSTED : String = "localTrusted" [static]
SWF ファイルはローカルファイルであり、設定マネージャまたは "FlashPlayerTrust" 構成ファイルを使用して信頼性があります。
| Security | ||
| LOCAL_WITH_FILE : String = "localWithFile" [static]
SWF ファイルはローカルファイルであり、信頼性はなく、ネットワークを指定してパブリッシュされているわけではありません。
| Security | ||
| LOCAL_WITH_NETWORK : String = "localWithNetwork" [static]
SWF ファイルはローカルファイルであり、信頼性はありませんが、ネットワークを指定してパブリッシュされています。
| Security | ||
| REMOTE : String = "remote" [static]
SWF ファイルはインターネット URL からのものであり、ドメインベースのサンドボックス規則に従って機能します。
| Security | ||
| exactSettings | プロパティ |
exactSettings:Boolean [read-write]
| 言語バージョン : | ActionScript 3.0 |
| Player のバージョン : | Flash Player 9 |
特定の Flash Player 設定に使用するドメインを Flash Player がどのように選択するかを指定します。設定には、カメラとマイクの許可、記憶領域の割り当て、永続共有オブジェクトの記憶領域などがあります。Flash Player 6 で使用されていた設定と同じ設定を SWF ファイルで使用するために、exactSettings を false に設定できます。
Flash Player 6 では、これらのプレーヤー設定に使用されていたドメインは、SWF ファイルのドメインの最後の部分に基づいていました。www.example.com のように SWF ファイルのドメインに 3 つ以上のセグメントが含まれている場合、ドメインの最初のセグメント ("www") は削除され、ドメインの残りの部分が使用されます。つまり、example.com です。したがって、Flash Player 6 では、www.example.com と store.example.com はどちらも example.com をこれらの設定のドメインとして使用します。同様に、www.example.co.uk と store.example.co.uk はどちらも example.co.uk をこれらの設定のドメインとして使用します。Flash Player 7 以降では、プレーヤー設定はデフォルトで SWF ファイルの正確なドメインに従って選択されます。たとえば、www.example.com の SWF ファイルは www.example.com のプレーヤー設定を使用し、store.example.com の SWF ファイルはそれとは別の store.example.com のプレーヤー設定を使用します。
Security.exactSettings が true に設定された場合、Flash Player はプレーヤー設定に対して正確なドメインを使用します。false に設定された場合、Flash Player は Flash Player 6 で使用されていたドメイン設定を使用します。exactSettings のデフォルト値は true です。exactSettings をデフォルト値から変更する場合は、Flash Player でプレーヤー設定を選択する必要があるイベントが発生する前にその変更を行う必要があります。たとえば、カメラまたはマイクの使用や永続共有オブジェクトの取得などのイベントの前です。
バージョン 6 の SWF ファイルをパブリッシュし、そのファイルから永続共有オブジェクトを作成しているときに、バージョン 7 以降にその SWF ファイルを移植した後で SWF ファイルからその永続共有オブジェクトを取得するか、またはバージョン 7 以降の別の SWF ファイルからその永続共有オブジェクトを取得する必要がある場合は、SharedObject.getLocal() を呼び出す前に Security.exactSettings を false に設定する必要があります。
public static function get exactSettings():Boolean
public function set exactSettings(value:Boolean):void
SecurityError — Flash Player は、プレーヤー設定に関する決定で exactSettings の値を少なくとも一度使用しました。
|
関連項目
| sandboxType | プロパティ |
sandboxType:String [read-only]
| 言語バージョン : | ActionScript 3.0 |
| Player のバージョン : | Flash Player 9 |
呼び出し元の SWF ファイルが動作しているセキュリティサンドボックスのタイプを示します。
Security.sandboxType は、次のいずれかの値になります。
remote (Security.REMOTE): この SWF ファイルはインターネット URL からのものであり、ドメインベースのサンドボックス規則に従って機能します。localWithFile (Security.LOCAL_WITH_FILE): この SWF ファイルはローカルファイルであり、信頼性はなく、ネットワークを指定してパブリッシュされているわけではありません。ローカルのデータソースから読み取ることができますが、インターネットでのやり取りはできません。localWithNetwork (Security.LOCAL_WITH_NETWORK): この SWF ファイルはローカルファイルであり、信頼性はありませんが、ネットワークを指定してパブリッシュされています。この SWF ファイルはインターネットとのやり取りはできますが、ローカルデータソースからの読み取りはできません。localTrusted (Security.LOCAL_TRUSTED): この SWF ファイルはローカルファイルであり、設定マネージャまたは "FlashPlayerTrust" 構成ファイルを使用して信頼性があります。ローカルのデータソースから読み取ることも、インターネットでやり取りすることもできます。Flash Player 8 以降でサポートされている任意のバージョンの SWF ファイルは、このプロパティを使用できます。つまり、たとえば Flash Player 8 で再生しているバージョン 7 の SWF ファイルから、このプロパティを確認することができます。このサポートでは、8 より古いバージョンについてパブリッシュする場合、このプロパティが再生時にサポートされるかどうかがパブリッシュ時にはわかりません。したがって、バージョン 7 以前の SWF ファイルでは、このプロパティは未定義の値です。これは、Flash Player のバージョン (flash.system.Capabilities.version で指定) が 8 よりも古いときにのみ生じる状況です。この場合、SWF ファイルがローカルファイルであるかどうかによってサンドボックスのタイプを判別できます。ローカルファイルの場合、SWF ファイルは localTrusted として分類されます。Flash Player 8 よりも前は、すべてのローカルコンテンツがこの方法で処理されていました。ローカルファイルでない場合、SWF ファイルは remote として分類されます。
詳細については、以下を参照してください。
public static function get sandboxType():String
関連項目
| allowDomain | () | メソッド |
public static function allowDomain(... domains):void
| 言語バージョン : | ActionScript 3.0 |
| Player のバージョン : | Flash Player 9 |
指定されたドメインの SWF ファイルおよび HTML ファイルが、allowDomain() 呼び出しを含む SWF ファイルのオブジェクトおよび変数にアクセスすることを許可します。
たとえば http://mysite.com/swfA.swf と http://mysite.com/swfB.swf のように、2 つの SWF ファイルが同じドメインからサービスを受けている場合、swfA.swf で swfB.swf 内の変数、オブジェクト、プロパティ、メソッドなどを調査、変更でき、swfB.swf でも swfA.swf に対して同様のことを実行できます。これは、クロスムービースクリプトまたはクロススクリプトと呼ばれます。
2 つの SWF ファイルが異なるドメインに所属している場合 (たとえば、http://siteA.com/swfA.swf および http://siteB.com/siteB.swf)、デフォルトでは、swfA.swf で swfB.swf をスクリプトすることも、swfB.swf で swfA.swf をスクリプトすることも許可されません。Security.allowDomain() を呼び出すことで、SWF ファイルによって他のドメインの SWF ファイルが付与されます。これをクロスドメインスクリプトと呼びます。Security.allowDomain("siteA.com") を呼び出すことで、siteB.swf によって siteA.swf に siteB.swf をスクリプトする許可が付与されます。
クロスドメインの場合は、関与する 2 つのドメインを明確にすることが重要です。説明のため、ここでは、クロススクリプトを実行する側をアクセス元 (通常、アクセスする SWF) と呼び、他をアクセス先 (通常、アクセスされる SWF) と呼びます。siteA.swf が siteB.swf をスクリプトする場合、siteA.swf がアクセス元で、siteB.swf がアクセス先となります。
allowDomain() を使用して確立されるクロスドメイン許可は、非対称です。前の例では、siteA.swf は siteB.swf をスクリプトできますが、siteB.swf は siteA.swf をスクリプトできません。siteA.swf で、siteA.swf をスクリプトする許可を siteB.com の SWF ファイルに付与するための allowDomain() を呼び出していないためです。対称的な許可を設定するには、両方の SWF ファイルで allowDomain() を呼び出すようにする必要があります。
Flash Player では、SWF ファイルを他の SWF ファイルによるクロスドメインスクリプトから保護するだけでなく、HTML ファイル によるクロスドメインスクリプトからも保護します。HTML から SWF へのスクリプトは、SetVariable などの古い Flash ブラウザの関数を使用するか、ExternalInterface.addCallback() で確立したコールバックを使用することで実行できます。HTML から SWF へのスクリプトがドメインを横切る場合、アクセス先 SWF ファイルは、アクセス元が SWF ファイルの場合と同様に、allowDomain() を呼び出す必要があります。それ以外の場合、操作は失敗します。
allowDomain() にパラメータとして IP アドレスを指定しても、指定された IP アドレスに存在するすべてのアクセス元からのアクセスが許可されるわけではありません。許可されるのは、その IP アドレスにマッピングされるドメイン名ではなく、指定された IP アドレスが URL に含まれるアクセス元からのアクセスだけです。
バージョン固有の相違点
Flash Player のクロスドメインセキュリティ規則は、バージョンを追うごとに発展してきました。次の表は、相違点をまとめたものです。
| クロススクリプトに関係する最新の SWF のバージョン | allowDomain() の必要性 | allowInsecureDomain() の必要性 | allowDomain() または allowInsecureDomain() を呼び出す必要のある SWF | allowDomain() または allowInsecureDomain() に指定できる項目 |
|---|---|---|---|---|
| 5 以前 | No | No | N/A | N/A |
| 6 | あり (スーパードメインが一致しない場合) | No | アクセス先 SWF ファイル、またはアクセス先 SWF ファイルと同じスーパードメインにある任意の SWF ファイル |
|
| 7 | あり (ドメインが完全に一致しない場合) | あり (HTTP から HTTPS へのアクセスを実行する場合 (ドメインが完全に一致する場合でも)) | アクセス先 SWF ファイル、またはアクセス先 SWF ファイルとまったく同じドメインにある任意の SWF ファイル |
|
| 8 以降 | あり (ドメインが完全に一致しない場合) | あり (HTTP から HTTPS へのアクセスを実行する場合 (ドメインが完全に一致する場合でも)) | アクセス先 SWF |
|
Flash Player の動作を制御するバージョンは、Flash Player 自身のバージョンでなく、SWF バージョン (SWF ファイルのパブリッシュバージョン) です。たとえば、Flash Player 8 でバージョン 7 用にパブリッシュされた SWF を再生する場合、バージョン 7 と一貫した動作が適用されます。そのため、Flash Player のアップグレードによっても、SWF ファイルに展開された Security.allowDomain() の動作は変わりません。
前の表のバージョン列は、クロススクリプト操作に関係する最新の SWF のバージョンを示しています。Flash Player の動作は、アクセス元 SWF ファイルまたはアクセス先 SWF ファイルのバージョンのいずれか新しい方のバージョンによって決まります。
次の段落では、Security.allowDomain() に関係する Flash Player のセキュリティ機能の変更について詳細に説明します。
バージョン 5 : クロスドメインスクリプトの制限はありません。
バージョン 6 : クロスドメインスクリプトのセキュリティが導入されました。デフォルトでは、クロスドメインスクリプトは禁止されています。Security.allowDomain() で許可できます。2 つのファイルが同じドメインに属しているかどうかを判別するため、各ファイルのスーパードメインが使用されます。このスーパードメインは、ファイルの URL の完全なホスト名から最初のセグメントを除き、最低 2 セグメントにまでしたものです。たとえば、www.mysite.com のスーパードメインは mysite.com となります。www.mysite.com の SWF ファイルと store.mysite.com の SWF ファイルは、Security.allowDomain() を呼び出さずに、お互いをスクリプトします。
バージョン 7 : スーパードメイン一致が、完全なドメイン一致に変更されました。2 つのファイルでお互いにスクリプトの実行が許可されるのは、それらの URL のホスト名が同じ場合だけです。それ以外の場合は、Security.allowDomain() を呼び出す必要があります。デフォルトでは、HTTPS 以外の URL からロードしたファイルは、まったく同じドメインからファイルをロードしたとしても、HTTPS の URL からロードしたファイルをスクリプトできません。この制限は HTTPS ファイルの保護に役立ちます。HTTPS 以外のファイルは、ダウンロード中に変更されやすく、HTTPS 以外のファイルが悪意を持って変更されると、このような不正操作を受けにくい HTTPS ファイルを損傷する可能性があります。アクセス先の HTTPS SWF ファイルが自発的にこの制限を実行できるように、Security.allowInsecureDomain() を導入しましたが、Security.allowInsecureDomain() を使用しないことをお勧めします。
バージョン 8 : 2 つの主要な変更点は次のとおりです。
Security.allowDomain() を呼び出した場合、アクセス先 SWF ファイルが Security.allowDomain() を呼び出した SWF ファイルであるときにのみ、クロススクリプト操作が許可されるようになりました。つまり、Security.allowDomain() を呼び出した SWF ファイルのみが、自身へのアクセスを許可できるようになりました。前のバージョンでは、Security.allowDomain() を呼び出した場合に、アクセス先 SWF ファイルが Security.allowDomain() を呼び出した SWF ファイルと同じドメインにある SWF ファイルであれば、クロススクリプト操作が許可されていました。前のバージョンでは、Security.allowDomain() を呼び出すと、呼び出し元 SWF ファイルのドメイン全体が開きました。Security.allowDomain("*") および Security.allowInsecureDomain("*") では、ワイルドカード値のサポートが追加されました。ワイルドカード (*) 値を使用すると、アクセス元ファイルがどこからロードされたかを問わず、任意のファイルでクロススクリプト操作を許可できます。ワイルドカードは、グローバル許可と考えてください。ワイルドカード許可は、ローカルファイルセキュリティ規則の下で特定の操作を有効にする場合に必要となります。具体的には、ローカル SWF ファイルで、その SWF ファイルにインターネット上の SWF ファイルをスクリプトするネットワークアクセス許可がある場合、アクセス先のインターネット SWF ファイルは、ローカル SWF ファイルの出所が不明であることを反映して、Security.allowDomain("*") を呼び出す必要があります。インターネット SWF ファイルが HTTPS URL からロードされる場合は、インターネット SWF ファイルでは、代わりに Security.allowInsecureDomain("*") を呼び出す必要があります。場合によっては、他のドメインから子 SWF ファイルをロードし、その子 SWF ファイルで親 SWF ファイルをスクリプトしたいが、子 SWF ファイルの最終的なドメインがわからないという状況になることがあります。このような状況は、たとえばロードバランシングリダイレクトやサードパーティ製サーバーを使用する場合に発生します。
この状況では、Loader.load() に渡す URLRequest オブジェクトの url プロパティを使用できます。たとえば、子 SWF ファイルを 親 SWF にロードする場合、親 SWF の Loader オブジェクトの contentLoaderInfo プロパティに次のようにアクセスできます。
Security.allowDomain(loader.contentLoaderInfo.url)
url プロパティの正しい値を取得するために、子 SWF ファイルのロードが開始されるまで待つようにしてください。子 SWF のロードがいつ開始されたかを確認するには、progress イベントを使用します。
この反対の状況が発生する場合もあります。つまり、親 SWF ファイルで子 SWF ファイルをスクリプトしたいが、親 SWF ファイルのドメインがわからない場合です。この状況では、SWF のルートオブジェクトである表示オブジェクトの loaderInfo プロパティにアクセスできます。子 SWF で、Security.allowDomain( this.root.loaderInfo.loaderURL) を呼び出します。親 SWF ファイルがロードされるまで待つ必要はありません。親 SWF ファイルは子 SWF ファイルがロードされた時点で既にロードされています。
Flash Player 8 以降用にパブリッシュする場合、Security.allowDomain("*") を呼び出すことによってこのような状況を処理することもできます。ただし、これは危険な近道になりかねません。任意のドメインの任意の他の SWF ファイルから呼び出し元 SWF ファイルにアクセスできるようになるためです。通常、_url プロパティを使用した方が安全です。
詳細については、以下を参照してください。
パラメータ
... domains — アクセス元として許可するドメインを指定するストリングまたは URLRequest オブジェクト。特別なドメイン "*" を指定して、すべてのドメインからのアクセスを許可できます。
"*" を指定することは、Flash オーサリングツールで [ローカルでの再生に関するセキュリティ] オプションの [ネットワークにのみアクセスする] を使用してパブリッシュされたローカル SWF ファイルから、ローカル以外の SWF ファイルへのアクセスを許可する唯一の方法です。 |
関連項目
| allowInsecureDomain | () | メソッド |
public static function allowInsecureDomain(... domains):void
| 言語バージョン : | ActionScript 3.0 |
| Player のバージョン : | Flash Player 9 |
指定したドメイン内の SWF ファイルおよび HTML ファイルが、HTTPS プロトコルでホストされた呼び出し元 SWF ファイルのオブジェクトと変数にアクセスすることを許可します。このメソッドはお勧めできません。後の「セキュリティについての考慮事項」を参照してください。
このメソッドは、Security.allowDomain() と同様に機能します。ただし、アクセス元が HTTPS 以外のプロトコルでロードされ、アクセス先が HTTPS でロードされる操作も許可します。Flash Player 7 以降では、HTTPS 以外のファイルで、HTTPS ファイルをスクリプトすることは許可されません。アクセス先 HTTPS SWF ファイルで allowInsecureDomain() メソッドを使用すると、この制限が解除されます。
HTTPS 以外のファイルから HTTPS ファイルへのスクリプトを有効にする場合にのみ、allowInsecureDomain() を使用してください。アクセス元の HTTPS 以外のファイルとアクセス先の HTTPS ファイルが、同じドメインに所属しているときのスクリプト (たとえば、http://mysite.com にある SWF ファイルで https://mysite.com にある SWF ファイルをスクリプトする場合) を有効にするために使用します。HTTPS 以外のファイル間でのスクリプト、HTTPS ファイル間でのスクリプト、または HTTPS ファイルから HTTPS 以外のファイルへのスクリプトを有効にするためには使用しないでください。このような状況では、代わりに allowDomain() を使用します。
セキュリティについての考慮事項 :Flash Player では柔軟性を最大化するために allowInsecureDomain() が用意されていますが、このメソッドを呼び出さないことをお勧めします。HTTPS を介してファイルを提供すると、開発者やユーザーに対して複数の保護機能を提供できますが、allowInsecureDomain の呼び出しによって、これらの保護機能は脆弱になります。次のシナリオでは、allowInsecureDomain() を十分な考慮なしで使用した場合にセキュリティが危険にさらされる状況を説明します。
次の情報は、考えられるシナリオのうちの 1 つで、クロススクリプトの実際例を通じて allowInsecureDomain() を理解できるように設計されています。セキュリティアーキテクチャに関する問題をすべて取り上げているわけではなく、背景情報としてのみ使用する必要があります。Flash Player デベロッパーセンターには、Flash Player およびセキュリティに関する広範な情報があります。詳細については、http://www.adobe.com/devnet/security/ を参照してください。
次の 2 つのコンポーネントから構成される e-コマースサイトを構築するシナリオについて考えてみます。1 つはカタログで、公開情報しか含まれていないため、保護する必要はありません。もう 1 つは、ショッピングカート/チェックアウトコンポーネントで、ユーザーの財務情報と個人情報を保護するためにセキュリティで保護する必要があります。ここで、カタログのサービスは http://mysite.com/catalog.swf から、カートのサービスは https://mysite.com/cart.swf から提供するものとします。このサイトの 1 つの要件として、第三者がセキュリティアーキテクチャの脆弱性を利用して、ユーザーのクレジットカード番号を盗むことができないことが挙げられます。
ここで、中間当事者である攻撃者がサーバーとユーザーの間に介入して、ユーザーがショッピングカートアプリケーションに入力したクレジットカード番号を盗もうとするとします。中間当事者としては、一部のユーザーが利用している悪質な ISP、ユーザーの職場にいる悪意がある管理者など、パブリックインターネット経由で送信されるネットワークパケットをユーザーとサーバー間で表示または変更できるものが考えられます。この状況は珍しいことではありません。
cart.swf で HTTPS を使用してクレジットカード情報をサーバーに送信している場合、中間当事者の攻撃者は、HTTPS 送信が暗号化されているため、ネットワークパケットから直接この情報を盗むことができません。ただし、攻撃者は別の手法を使用できます。それは、いずれかの SWF ファイルの内容をユーザーへの配信時に変更し、その SWF ファイルを改変バージョン (ユーザー情報を攻撃者が所有する別のサーバーに送信する) と置き換える手法です。
HTTPS プロトコルは、何よりもまずこの "変更" 攻撃を防止します。暗号化されているだけでなく、HTTPS 送信に不正操作防止機能が付いているためです。中間当事者の攻撃者がパケットを変更すると、受信側はその変更を検出し、パケットを廃棄します。このため、この状況で攻撃者は cart.swf を変更できません。このファイルが HTTPS 経由で配信されるからです。
ところで、HTTP 経由で提供される catalog.swf 内のボタンで、HTTP 経由で提供される cart.swf 内のショッピングカートにアイテムを追加できるようにしたいとします。この機能を実現するために、cart.swf で allowInsecureDomain() を呼び出します。これで、catalog.swf は cart.swf をスクリプトできます。ただし、このアクションでは、予期しない結果が発生します。この場合、攻撃者は、catalog.swf をユーザーが最初にダウンロードする際、その内容を変更できます。catalog.swf は HTTP で配信され、不正操作防止機能が付いていないためです。攻撃者が変更した catalog.swf は、これで cart.swf をスクリプトできるようになります。cart.swf に allowInsecureDomain() への呼び出しが含まれているためです。変更された catalog.swf ファイルは、ActionScript を使用して、cart.swf 内の変数にアクセスできるため、ユーザーのクレジットカード情報やその他の機密データを読み取ることができます。その後、変更された catalog.swf は、このデータを攻撃者のサーバーに送信できます。
この実装は明らかに好ましいものではありませんが、サイト上の 2 つの SWF ファイル間でクロススクリプトを許可したい場合があります。次に、この仮想の e-コマースサイトを再設計して allowInsecureDomain() を除外する方法として、考えられる方法を 2 つ示します。
Web ブラウザでは、長年にわたり HTTPS ファイルと HTTPS 以外のファイルの分離を強制してきました。説明したシナリオでは、この制限が必要であることの 1 つの理由が明確に示されています。Flash Player では、絶対必要な場合、このセキュリティの制限を回避できますが、それを実行する前に結果を慎重に検討する必要があります。
詳細については、以下を参照してください。
パラメータ
... domains — アクセス元として許可するドメインを指定するストリングまたは URLRequest オブジェクト。特別なドメイン "*" を指定して、すべてのドメインからのアクセスを許可できます。
"*" を指定することは、Flash オーサリングツールで [ローカルでの再生に関するセキュリティ] 設定 ([ファイル]-[パブリッシュ設定]-[Flash] タブ) の [ネットワークにのみアクセスする] オプションを使用してパブリッシュされたローカル SWF ファイルから、ローカル以外の SWF ファイルへのアクセスを許可する唯一の方法です。 |
関連項目
| loadPolicyFile | () | メソッド |
public static function loadPolicyFile(url:String):void
| 言語バージョン : | ActionScript 3.0 |
| Player のバージョン : | Flash Player 9 |
url パラメータで指定された場所からドメイン間ポリシーファイルをロードします。Flash Player では、Flash ムービーが置かれているサーバー以外のサーバーからデータをロードすることを許可するかどうかを設定するために、ポリシーファイルが使用されます。
デフォルトでは、Flash Player でポリシーファイルの検索が行われるのはデータロード要求が行われているサーバーの /crossdomain.xml に限られます。
Security.loadPolicyFile() によって、Flash Player では任意の場所からポリシーファイルをロードできるようになります。次に例を示します。
Security.loadPolicyFile("http://www.example.com/sub/dir/pf.xml");
これにより、Flash Player は指定された URL からポリシーファイルを取得できるようになります。この場所に置かれているポリシーファイルによって得られる許可は、サーバーの仮想ディレクトリ階層で同レベル以下のコンテンツすべてに適用されます。たとえば、前のコードに続くこれらの行によって例外はスローされません。
import flash.net.*;
var request:URLRequest = new URLRequest("http://www.example.com/sub/dir/vars.txt");
var loader:URLLoader = new URLLoader();
loader.load(request);
var loader2:URLLoader = new URLLoader();
var request2:URLRequest = new URLRequest("http://www.example.com/sub/dir/deep/vars2.txt");
loader2.load(request2);
ただし、次のコードではセキュリティ例外がスローされます。
import flash.net.*;
var request3:URLRequest = new URLRequest("http://www.example.com/elsewhere/vars3.txt");
var loader3:URLLoader = new URLLoader();
loader3.load(request3);
loadPolicyFile() を使用して、任意の数のポリシーファイルをロードできます。ポリシーファイルを必要とする要求がある場合、Flash Player はポリシーファイルのダウンロードがすべて完了するまで必ず待機します。その間に要求が拒否されることはありません。loadPolicyFile() で指定されたポリシーファイルによって要求が許可されなかった場合は、最終的にデフォルトの場所である /crossdomain.xml が参照されます。
特定のポート番号で xmlsocket プロトコルを使用することで、直接 XMLSocket サーバーからポリシーファイルを取得することができます。次に例を示します。
Security.loadPolicyFile("xmlsocket://foo.com:414");
このコードを使用すると、Flash Player は指定されたホストとポートからポリシーファイルを取得しようとします。1024 以上のポートだけでなく、任意のポートを使用できます。指定されたポートを使用して接続が確立されると、Flash Player は null バイトで終了する <policy-file-request /> を送信します。XMLSocket サーバーを設定することで、ポリシーファイルと通常の XMLSocket 接続に同じポートを使用することができます。この場合、サーバーは <policy-file-request /> が受信されるまで待機し、その後でポリシーファイルを送信する必要があります。標準の接続とは異なるポートを使用して、ポリシーファイルを提供するようにサーバーを設定することもできます。この場合は、ポリシーファイル専用のポートで接続が確立されるとすぐにポリシーファイルを送信できます。ポリシーファイルを終了するためにサーバーから null バイトを送信し、それ以降の接続を閉じる必要があります。サーバー側で接続を閉じなければ、最後の null バイトが受信されるとすぐに Flash Player 側で接続が閉じられます。
XMLSocket サーバーで提供するポリシーファイルのシンタックスは、他のポリシーファイルとほぼ同じですが、アクセスを許可するポートも指定する必要がある点が異なります。ポリシーファイルが 1024 未満のポートから提供される場合、任意のポートへのアクセスが許可されます。ポリシーファイルが 1024 以上のポートから提供される場合、他の 1024 以上のポートにのみアクセスを許可できます。許可するポートは、<allow-access-from> タグの "to-ports" 属性で指定します。単一のポート番号、ポート範囲、ワイルドカードを使用できます。次に、XMLSocket ポリシーファイルの例を示します。
<cross-domain-policy>
<allow-access-from domain="*" to-ports="507" />
<allow-access-from domain="*.foo.com" to-ports="507,516" />
<allow-access-from domain="*.bar.com" to-ports="516-523" />
<allow-access-from domain="www.foo.com" to-ports="507,516-523" />
<allow-access-from domain="www.bar.com" to-ports="*" />
</cross-domain-policy>
元のデフォルトの場所、つまり HTTP サーバーのポート 80 の /crossdomain.xml から取得されたポリシーファイルでは、1024 以上の全ポートへのアクセスが暗黙的に許可されています。HTTP サーバーの他の場所から、XMLSocket 操作を許可するポリシーファイルを取得することはできません。XMLSocket ポリシーファイルを独自の場所に置く場合、XMLSocket サーバー上に置く必要があります。
1024 未満のポートに接続する機能は、loadPolicyFile() のみを使ってロードされたポリシーファイルによって許可できます。
SWF ファイルがこのメソッドを使用しないようにするには、SWF コンテンツを含んでいる HTML ページの object タグおよび embed タグの allowNetworking パラメータを設定します。
詳細については、以下を参照してください。
パラメータ
url:String — ロードするドメイン間ポリシーファイルの URL の場所。
|
関連項目
| showSettings | () | メソッド |
public static function showSettings(panel:String = "default"):void
| 言語バージョン : | ActionScript 3.0 |
| Player のバージョン : | Flash Player 9 |
Flash Player の [セキュリティ設定] パネルを表示します。
パラメータ
panel:String (default = "default") — どの [セキュリティ設定] パネルを表示するかを指定する SecurityPanel クラスの値です。このパラメータを省略すると、SecurityPanel.DEFAULT が使用されます。
|
関連項目
| LOCAL_TRUSTED | 定数 |
public static const LOCAL_TRUSTED:String = "localTrusted"
| 言語バージョン : | ActionScript 3.0 |
| Player のバージョン : | Flash Player 9 |
SWF ファイルはローカルファイルであり、設定マネージャまたは "FlashPlayerTrust" 構成ファイルを使用して信頼性があります。ローカルのデータソースから読み取ることも、インターネットでやり取りすることもできます。
関連項目
| LOCAL_WITH_FILE | 定数 |
public static const LOCAL_WITH_FILE:String = "localWithFile"
| 言語バージョン : | ActionScript 3.0 |
| Player のバージョン : | Flash Player 9 |
SWF ファイルはローカルファイルであり、信頼性はなく、ネットワークを指定してパブリッシュされているわけではありません。ローカルのデータソースから読み取ることができますが、インターネットでのやり取りはできません。
関連項目
| LOCAL_WITH_NETWORK | 定数 |
public static const LOCAL_WITH_NETWORK:String = "localWithNetwork"
| 言語バージョン : | ActionScript 3.0 |
| Player のバージョン : | Flash Player 9 |
SWF ファイルはローカルファイルであり、信頼性はありませんが、ネットワークを指定してパブリッシュされています。この SWF ファイルはインターネットとのやり取りはできますが、ローカルデータソースからの読み取りはできません。
関連項目
| REMOTE | 定数 |
public static const REMOTE:String = "remote"
| 言語バージョン : | ActionScript 3.0 |
| Player のバージョン : | Flash Player 9 |
SWF ファイルはインターネット URL からのものであり、ドメインベースのサンドボックス規則に従って機能します。
関連項目
click イベントを使用して、Flash Player の [設定] の [ローカル記憶領域] パネルを表示する方法を示します。オレンジのボックスが draw() を使用してステージに追加されます。draw() では、click イベントリスナーに名前付き clickHandler() が追加されます。これは click イベントに応答し、[ローカル記憶領域] パネルを開くように Flash Player に指示します。
package {
import flash.display.Sprite;
import flash.text.TextField;
import flash.events.*;
import flash.system.Security;
import flash.system.SecurityPanel;
public class SecurityExample extends Sprite {
private var bgColor:uint = 0xFFCC00;
private var size:uint = 100;
public function SecurityExample() {
draw();
}
private function draw():void {
var child:Sprite = new Sprite();
child.graphics.beginFill(bgColor);
child.graphics.drawRect(0, 0, size, size);
child.graphics.endFill();
child.buttonMode = true;
var label:TextField = new TextField();
label.text = "settings";
label.selectable = false;
label.mouseEnabled = false;
child.addChild(label);
child.addEventListener(MouseEvent.CLICK, clickHandler);
addChild(child);
}
private function clickHandler(event:MouseEvent):void {
Security.showSettings(SecurityPanel.LOCAL_STORAGE);
}
}
}
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート
現在のページ: http://livedocs.adobe.com/flash/9.0_jp/ActionScriptLangRefV3/flash/system/Security.html