Flashでのクロスドメインに関して

2009.9.25 1:04 PM

久々にクロスドメインになりそうなFlash案件があったのだが、
そういえばFlash Player 10になって、セキュリティの扱いに変更があったことを思い出したので調べてみた。
いくつか有効な手段があった。ので備忘録的メモ。

Flash Player 10 におけるセキュリティ変更はakihiro kamijo: Flash Player 10 におけるセキュリティ変更を参照。

要は、クロスドメイン間のデータのやりとりをしたければ、
参照される側のサーバールートにポリシーファイル(crossdomain.xml)を設置し、
ポリシーファイル内で、メタポリシーを設定してくれっていう内容。

サーバーのルートに、ポリシーファイルの設置が可能であれば、特に問題はないのだが、
共有サーバーなどを使用しているケースでは、
基本的にはサーバーのルートにポリシーファイルを設置できないことが多い。
実際にこの問題に直面している記事があったので、以下参照。
RIAトピック: 【trick7】crossdomain.xml 格納場所を変更しても外部ドメインのルートからも呼び出そうとする問題

で、この問題の有効な対処法が以下。
FLASH-japan: サイトルートにポリシーファイルを置けない環境下でのクロスドメイン運用について

上記の記事はHTTPヘッダーを使って解決するという方法。

別ドメインからのアクセスを許可するファイルと同じ階層かそれ以上のディレクトリに、ポリシーファイルを設置。
Flash側では、loadPolicyFileメソッドで、設置したポリシーファイルを予め読み込んでおく。

Security.loadPolicyFile(“http://www.hoge.com/hoge/hoge/crossdomain.xml”);

さらに、ポリシーファイルと同じディレクトリにHTTPヘッダーを設定した.htaccessを設置。
こうすることでサーパーのルートにあるはずのポリシーファイルよりも、
.htaccessと同じディレクトリにあるポリシーファイルの読み込みが優先されるので、
サーパーのルートのポリシーファイルを読みにいかなくなり、セキュリティエラーが出なくなるということのようだ。
gaienboy様、ありがとうございます。

 

上記のようにサーバーにポリシーファイルが置ける場合はいいとして、
ポリシーファイルを絶対に設置できない場合はどう対処したらいいだろうか?
例えば外部のWebAPIサービスを利用する際などは、ポリシーファイルを設置していないサービスも多い。
こういったケースでは、Flashからの(ActionScriptからの)外部APIへのアクセスができない。

このケースでの有効な対処法がこれ↓
YOPPA BLOG: Flash(AS3)でcrossdomain.xml無しにクロスドメインにアクセスする

要は、PHPでProxyを設定して、Proxy経由で外部APIから情報を引っ張ってくるという方法。
この方法を用いれば、ポリシーファイルを設置していないサービスでも情報を引っ張ってこれる。
YOPPA BLOG様、あざーす!

タグ: ,

Leave a Reply