サンドボックスとは?
■サンドボックスについて
サンドボックスは「砂場」を意味します。セキュリティの考え方の1つです。
子供を不特定の場所で遊ばせると危険ですが、砂場だけで遊ばせると安心です。
プログラムも同じです。Flash Player で何でも実行できるようにしてしまうと悪用され危険ですが、機能を制限してしまうと悪用できないので安心です。
プログラム内でどんな無茶な事をしても外に影響がでないように論理的に制限されていれば、誰がどんな Flash を作ったとしても一定の安全性が保証されます。
Flash Player ではサンドボックスとして以下のような制限があります。
| ・ | ローカルファイルとネットワークファイルへはどちらか片方しかアクセスできない |
| ・ | 別ドメインの不特定のファイルにアクセスできない |
| ・ | ローカルで JavaScript を実行できない |
別ドメインへのアクセスについて
■別ドメインへのアクセスについて
「swf ファイル」から「別ドメインにあるファイル」を読み込む場合、サンドボックスによる制限があります
サンドボックスによる制限がある場合、
「テキスト形式のファイル」は読み込めません。
「バイナリファイル」は読み込めません。
「画像ファイル」は、ビットマップにキャプチャーできません。(表示は可)
「動画ファイル」は、ビットマップにキャプチャーできません。(再生は可)
「サウンドファイル」はID3データを取得することができません。(再生は可)
「CGI」へアクセスすることはできません。
「ソケット通信」でアクセスすることはできません。
「バイナリファイル」は読み込めません。
「画像ファイル」は、ビットマップにキャプチャーできません。(表示は可)
「動画ファイル」は、ビットマップにキャプチャーできません。(再生は可)
「サウンドファイル」はID3データを取得することができません。(再生は可)
「CGI」へアクセスすることはできません。
「ソケット通信」でアクセスすることはできません。
■サンドボックスを解除するには?
サンドボックスを解除して別ドメイン間でアクセス可能な状態にするには、「クロスドメインポリシーファイル」の設定と設置を行います。
■swf ファイルの注意点
swf ファイルの場合、「クロスドメインポリシーファイル」の設定ではなく、「クロスドメインスクリプト」の設定を行います。
■サウンドファイルの注意点
サウンドファイルの場合、以下の「クロスドメインポリシーファイル」の設定を行った上に、
さらに追加で、SoundLoaderContext クラスを使用して「クロスドメインポリシーファイルを使用する」という設定を行う必要があります。
さらに追加で、SoundLoaderContext クラスを使用して「クロスドメインポリシーファイルを使用する」という設定を行う必要があります。
■クロスドメインポリシーファイルについて
サンドボックスを解除して別ドメイン間でアクセス可能な状態にするには、「クロスドメインポリシーファイル」の設定を行います。
ファイル名は、「crossdomain.xml」となります。
「クロスドメインポリシーファイル」を「読み込みたいファイル」が格納されたサーバに設置し、「どこからアクセスされたときに読み込まれる事を許可するか?」という設定を記述します。
記述例です。
「www.hakuhin.jp」からのアクセスを許可する
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="www.hakuhin.jp" />
</cross-domain-policy>
「hakuhin.jp」のすべてのサブドメインからのアクセスを許可する
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*.hakuhin.jp" />
</cross-domain-policy>
複数のドメインを許可する
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="www.hakuhin.jp" />
<allow-access-from domain="*.hakuhin.jp" />
<allow-access-from domain="127.0.0.1" />
</cross-domain-policy>
すべてのドメインからのアクセスを許可する
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" />
</cross-domain-policy>
ポート番号を制限する記述例です。
80番ポートのみアクセスを許可する
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" to-ports="80" />
</cross-domain-policy>
1024 番 と 1026 番 ポートのみアクセスを許可する
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" to-ports="1024,1026" />
</cross-domain-policy>
1024 番から 2048 番 ポートのみアクセスを許可する
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" to-ports="1024-2048" />
</cross-domain-policy>
すべてのポートのアクセスを許可する
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*" to-ports="*" />
</cross-domain-policy>
swf ファイルが HTTP 内にあり、読み込みたいファイルが HTTPS 内である場合などの
「セキュアではないドメインからのアクセス」を許可する記述例です。
セキュアではないドメインからのアクセスを許可する
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="www.hakuhin.jp" secure="false" />
</cross-domain-policy>
■ポリシーファイルの格納場所について
Flash Player のバージョンによりセキュリティの仕様が変わります。
ユーザーは常に最新の Flash Player を使う訳ですから、Flash をどんな古いバージョンで作っていたとしても、セキュリティポリシーは最新の仕様に従う必要があります。
以下に各バージョンの解説がありますが、一番最新の設定を行ってください。
下記のバージョンより最新の Flash Player がリリースされている場合は、このページの情報は古いですのでご注意下さい。
ユーザーは常に最新の Flash Player を使う訳ですから、Flash をどんな古いバージョンで作っていたとしても、セキュリティポリシーは最新の仕様に従う必要があります。
■ポリシーファイルの格納場所について(Flash Player 9 以前)
クロスドメインポリシーファイルの格納位置によって、「すべてのフォルダに適用する」か「一部のフォルダに適用する」かを指定できます。
■ポリシーファイルをすべてのフォルダに適用する(Flash Player 9 以前)
クロスドメインポリシーファイルをドメイン直下のルートディレクトリに格納した場合、ドメイン内のすべてのファイルにポリシーを適用できます。
Flash 側では特に追加の設定はありません。
■設定例
例えば、
「http://aaa.com/flash.swf」に格納された swf ファイルから
「http://bbb.com/download/text.txt」に格納されたテキストファイルを読み込みたいとします。
「http://aaa.com/flash.swf」に格納された swf ファイルから
「http://bbb.com/download/text.txt」に格納されたテキストファイルを読み込みたいとします。
「http://bbb.com」側のサーバにクロスドメインポリシーファイルを設置する事になります。
クロスドメインポリシーファイルには「http://aaa.com」からアクセスされる事を許可する記述を行います。
「 aaa.com 」からのアクセスを許可する
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*.aaa.com" />
</cross-domain-policy>
クロスドメインポリシーファイルを「http://bbb.com/crossdomain.xml」に格納します。
これで 「 http://bbb.com/」のすべてのファイルにクロスドメインポリシーの設定が適用されます。
「http://aaa.com/flash.swf」の swf ファイルから「http://bbb.com/download/text.txt」のテキストファイルを読み込むことが可能になりました。
■ポリシーファイルを一部のフォルダに適用する(Flash Player 9 以前)
「クロスドメインポリシーファイル」を好きなフォルダに格納した場合、そのフォルダ内のファイルに限定してポリシーを適用できます。
この場合、 Flash 側から読み込みたい「クロスドメインポリシーファイル」を指定する必要があります。
■Flash からクロスドメインポリシーファイルを指定する
任意の「クロスドメインポリシーファイル」を読み込むように指定するには、Security.loadPolicyFile() メソッドを使用します。
引数に文字列で URL を指定します。
「 http://hakuhin.jp/text 」フォルダ内のクロスドメインファイルを読み込む
Security.loadPolicyFile('http://hakuhin.jp/text/crossdomain.xml');
■設定例
例えば、
「http://aaa.com/flash.swf」に格納された swf ファイルから
「http://bbb.com/download/text.txt」に格納されたテキストファイルを読み込みたいとします。
「http://aaa.com/flash.swf」に格納された swf ファイルから
「http://bbb.com/download/text.txt」に格納されたテキストファイルを読み込みたいとします。
「http://bbb.com」側のサーバにクロスドメインポリシーファイルを設置する事になります。
クロスドメインポリシーファイルには「http://aaa.com」からアクセスされる事を許可する記述を行います。
「 aaa.com 」からのアクセスを許可する
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*.aaa.com" />
</cross-domain-policy>
クロスドメインポリシーファイルを「http://bbb.com/download/crossdomain.xml」に格納します。
これで 「 http://bbb.com/download/」以下のフォルダ内のすべてのファイルにクロスドメインポリシーの設定が適用されます。
最後に「http://aaa.com/flash.swf」の swf ファイル内にクロスドメインポリシーファイルを指定するスクリプトを追加します。
テキストファイルを読み込む処理を行う前に1度だけ実行しておきます。
「http://bbb.com/download/」フォルダ内のクロスドメインファイルを読み込む
Security.loadPolicyFile('http://bbb.com/download/crossdomain.xml');
「http://aaa.com/flash.swf」の swf ファイルから「http://bbb.com/download/text.txt」のテキストファイルを読み込むことが可能になりました。
■ポリシーファイルの格納場所について(Flash Player 10 ~ 10.1 の場合)
クロスドメインポリシーファイルの格納位置によって、「すべてのフォルダに適用する」か「一部のフォルダに適用する」かを指定できます。
■ポリシーファイルをすべてのフォルダに適用する
(Flash Player 10 ~ 10.1 の場合)
(Flash Player 10 ~ 10.1 の場合)
「クロスドメインポリシーファイル」をドメイン直下のルートディレクトリに格納した場合、ドメイン内のすべてのファイルにポリシーを適用できます。
Flash 側では特に追加の設定はありません。
■設定例
例えば、
「http://aaa.com/flash.swf」に格納された swf ファイルから
「http://bbb.com/download/text.txt」に格納されたテキストファイルを読み込みたいとします。
「http://aaa.com/flash.swf」に格納された swf ファイルから
「http://bbb.com/download/text.txt」に格納されたテキストファイルを読み込みたいとします。
「http://bbb.com」側のサーバにクロスドメインポリシーファイルを設置する事になります。
クロスドメインポリシーファイルには「http://aaa.com」からアクセスされる事を許可する記述を行います。
「 aaa.com 」からのアクセスを許可する
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*.aaa.com" />
</cross-domain-policy>
クロスドメインポリシーファイルを「http://bbb.com/crossdomain.xml」に格納します。
これで 「 http://bbb.com/」のすべてのファイルにクロスドメインポリシーの設定が適用されます。
「http://aaa.com/flash.swf」の swf ファイルから「http://bbb.com/download/text.txt」のテキストファイルを読み込むことが可能になりました。
■ポリシーファイルを一部のフォルダに適用する
(Flash Player 10 ~ 10.1 の場合)
(Flash Player 10 ~ 10.1 の場合)
「クロスドメインポリシーファイル」を好きなフォルダに格納した場合、そのフォルダ内のファイルに限定してポリシーを適用できます。
この場合、 Flash 側から読み込みたい「クロスドメインポリシーファイル」を指定する必要があります。
■Flash からクロスドメインポリシーファイルを指定する
任意の「クロスドメインポリシーファイル」を読み込むように指定するには、Security.loadPolicyFile() メソッドを使用します。
引数に文字列で URL を指定します。
「 http://hakuhin.jp/text 」フォルダ内のクロスドメインファイルを読み込む
Security.loadPolicyFile('http://hakuhin.jp/text/crossdomain.xml');
■マスタークロスドメインポリシーファイルについて
ドメイン直下のルートディレクトリに置いた「クロスドメインポリシーファイル」を、「マスタークロスドメインポリシーファイル」といいます。
Flash Player 10 以降のデフォルトの動作は、「マスタークロスドメインポリシーファイル」のみが読み込み可能な状態になっています。
ドメイン直下のルートディレクトリ以外の好きなフォルダに「クロスドメインポリシーファイル」を格納していたとしても、Flash から読み込むことができず、クロスドメインポリシーを適用することができません。
■メタポリシーの設定を行う
そこで、「マスタークロスドメインポリシーファイル」に、メタポリシーを追加します。
メタポリシーを追加すると、他のフォルダにある「クロスドメインポリシーファイル」の読み込みを許可する事ができます。
「マスタークロスドメインポリシーファイル」に記述するメタポリシーの設定例です。
すべてのクロスドメインファイルを読み込む許可をする(Flash Player 9 以前の動作)
<?xml version="1.0"?>
<cross-domain-policy>
<site-control permitted-cross-domain-policies="all" />
</cross-domain-policy>
マスター用クロスドメインポリシーファイルのみ読み込みを許可する(Flash Player 10 以降のデフォルト動作)
<?xml version="1.0"?>
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only" />
</cross-domain-policy>
クロスドメインポリシーファイルのみ読み込みを許可しない
<?xml version="1.0"?>
<cross-domain-policy>
<site-control permitted-cross-domain-policies="none" />
</cross-domain-policy>
「Content-Type」が「text/x-cross-domain-policy」であるファイルのみ許可する(HTTP,HTTPSサーバで動作)
<?xml version="1.0"?>
<cross-domain-policy>
<site-control permitted-cross-domain-policies="by-content-type" />
</cross-domain-policy>
「crossdomain.xml」というファイル名であるファイルのみ許可する(FTPサーバで動作)
<?xml version="1.0"?>
<cross-domain-policy>
<site-control permitted-cross-domain-policies="by-ftp-filename" />
</cross-domain-policy>
ドメイン直下のルートディレクトリに「クロスドメインポリシーファイル」を設置できない場合は、HTTP応答ヘッダで、メタポリシーを宣言する事もできるようです。
■設定例
例えば、
「http://aaa.com/flash.swf」に格納された swf ファイルから
「http://bbb.com/download/text.txt」に格納されたテキストファイルを読み込みたいとします。
「http://aaa.com/flash.swf」に格納された swf ファイルから
「http://bbb.com/download/text.txt」に格納されたテキストファイルを読み込みたいとします。
「http://bbb.com」側のサーバにクロスドメインポリシーファイルを設置する事になります。
クロスドメインポリシーファイルには「http://aaa.com」からアクセスされる事を許可する記述を行います。
「 aaa.com 」からのアクセスを許可する
<?xml version="1.0"?>
<cross-domain-policy>
<allow-access-from domain="*.aaa.com" />
</cross-domain-policy>
クロスドメインポリシーファイルを「http://bbb.com/download/crossdomain.xml」に格納します。
「http://bbb.com」側のサーバには、さらにマスタークロスドメインポリシーファイルを設置する事になります。
マスタークロスドメインポリシーファイルには、「ルート以外に格納されたクロスドメインポリシーファイルの読み込みを許可する」為のメタポリシーを記述します。
ルート以外に格納されたクロスドメインポリシーファイルの読み込みを許可する
<?xml version="1.0"?>
<cross-domain-policy>
<site-control permitted-cross-domain-policies="all" />
</cross-domain-policy>
マスタークロスドメインポリシーファイルを「http://bbb.com/crossdomain.xml」に格納します。
これで 「 http://bbb.com/download/」以下のフォルダ内のすべてのファイルにクロスドメインポリシーの設定が適用されます。
最後に「http://aaa.com/flash.swf」の swf ファイル内にクロスドメインポリシーファイルを指定するスクリプトを追加します。
テキストファイルを読み込む処理を行う前に1度だけ実行しておきます。
「http://bbb.com/download/」フォルダ内のクロスドメインファイルを読み込む
Security.loadPolicyFile('http://bbb.com/download/crossdomain.xml');
「http://aaa.com/flash.swf」の swf ファイルから「http://bbb.com/download/text.txt」のテキストファイルを読み込むことが可能になりました。
