crossdomain.xml 格納場所を変更しても外部ドメインのルートからも呼び出そうとする問題

AS2 コンテンツで確認(AS3 でも起こるのかも)した問題。
わりとずーっと悩んでいて、僕だけかと思いきや海外でもフォーラムに上がっていたので紹介。

loadPolicyFile / crossdomain.xml problems – ActionScript.org Forums

外部ドメインから画像をロードして操作する時には、画像を持っている外部ドメインサーバ上に「crossdomain.xml」というポリシーファイルを設置するのはお馴染みですが、その crossdomain.xml を外部サーバーのルートに置けない場合があります。
その場合は、

System.security.loadPolicyFile("http://www.hoge.com/foo/bar/crossdomain.xml");

みたいな感じで、外部サーバのドメインルート以外(以下階層)の場所を指定してやれば、その場所にある crossdomain.xml をロードしてくれます。ここまでは期待通りです。

ところが、そのポリシーファイルをロードしつつ、なぜか FlashPlayer が勝手に外部ドメインルートから crossdomain.xml をロードしようとします。つまり http://www.hoge.com/crossdomain.xml をロードしようと勝手に試みる。そんなん置いてないのに!で、結果 notfound だとエラーが出ます。
これはローカル開発中でも確認できて:

URL 'http://www.hoge.com/crossdomain.xml' を開く処理のエラー

と出る。だからそこは読まなくっていいって!

一応 System.security.loadPolicyFile() は動いているので外部画像操作については問題なくできるのだけれど、裏でエラー吐かれているので気分が悪い。
FlashPlayer10 のセキュリティモデル変更起因のエラーかと思いきや、さっきのフォーラムの投稿日付は2007年2月だし、昔っからある現象なのかも。FlashPlayer のバグっぽいよというコメントとか、FF はだめだけど IE では大丈夫(Safariでも僕がnotfound確認)もあるけれど、どうにかならないかなぁと今探し中。

と思ってたら Flash-jp のフォーラムに答えがありました!「crossdomain.xmlにsecure=”false”がいる」とのこと。知らなかった。

で、リンク辿って読み進めていくと、

http://www.adobe.com/jp/devnet/flash/articles/fplayer_security_03.html

各 <allow-access-from> タグには、オプションの secure 属性もあります。この属性のデフォルトは true です。ポリシーファイルが HTTPS サーバ上にあり、HTTPS サーバ以外にある SWF ファイルで HTTPS サーバのデータをロードする場合は、この属性を false に設定できます。

secure 属性を false に設定すると、HTTPS のセキュリティが影響を受けます。特に、この属性を false に設定すると、セキュアなコンテンツがスヌープ攻撃やスプーフィング攻撃にさらされる可能性があります。secure 属性は false に設定しないことを強くお勧めします。

ロードするデータが HTTPS サーバ上にあり、そのデータをロードする SWF ファイルが HTTP サーバ上にある場合は、SWF ファイルを HTTPS サーバに移動することをお勧めします。SWF ファイルを HTTPS サーバに移動すると、セキュアデータのすべてのコピーを HTTPS の保護下に置くことができます。しかし、SWF ファイルを HTTP サーバ上に置く必要がある場合は、次のコードに示すように、secure=”false” 属性を タグに追加します。

って書かれててビビり中。
現状でも画像操作自体はいけてるので、ルートから勝手に読み込もうとするのだけをやめてください。>FlashPlayer さん←んー。なんかFlashPlayer10 だと、以前は無理矢理動いてたところが厳しくなって動かなくなってるような現象に今悩まされ中。

検証1:
ルートディレクトリから何層か下りたところに置く crossdomain.xml に secure=”false” を追記して、そのファイルをローカルの開発環境から System.security.loadPolicyFile() でロードしてみたら、相変わらず「URL ‘http://www.hoge.com/crossdomain.xml’ を開く処理のエラー」と出る。ダメじゃん!

このエントリーをはてなブックマークに追加
はてなブックマーク - crossdomain.xml 格納場所を変更しても外部ドメインのルートからも呼び出そうとする問題

Comments:2

Aquioux 09-03-16 (月) 21:27

ルートの crossdomain.xml を読みに行こうとするのは正しい挙動なんじゃないかと私は思っています。

tera さんの delicious の corossdomain タグには未登録だった URL を以下にご呈示します。

http://www.adobe.com/jp/devnet/flashplayer/articles/fplayer9-10_security.html

ここの「Flash Player 9,0,115,0以降」の説明には以下のようにあります。

>他のポリシーファイルを無効化するメタポリシーがマスターポリシーファイルに含まれている場合は、マスター以外の位置のポリシーファイルを用いる際に、データ読み込みに影響が及ぶことがあります。 アクセスしようとしているサーバにメタポリシーが用意されていない場合、Flash Playerはマスター以外のポリシーファイルを許容します。

マスターポリシーファイルというのはルートの crossdomain.xml ですが、私はこの文章を以下のように解釈しました。
マスターポリシーファイルにマスター以外のポリシーファイルを無効にする記述(メタポリシー)があったらそいつらは無効になるよ、メタポリシーがなかったならば、サブディレクトリにある crossdomain.xml を許すよ。
つまり、どっちにしてもルートの crossdomain.xml を見に行くということなんじゃないでしょうか。

もし間違っていたらごめんなさい。

tera 09-03-16 (月) 23:12

>Aquiouxさま
ご無沙汰しております。ご丁寧にありがとうございます!
「他のドメインのSWFファイルに対してデータの読み込みを許可するサーバには、必ず、所定のマスター位置(/crossdomain.xml)にポリシーファイルが配置されている必要があります。」
とありますね!ぐおおー。

そこからのリンクも見た感じ「メタポリシーファイルをゴニョゴニョして頑張れ!」的なことが書かれていますね。
ちょっと調べてみます。
とりいそぎ、ご教示ありがとうございました!

Comment Form
Remember personal info

Return to page top