にわとりプログラマーの備忘録

覚えたことをすぐ忘れてしまう、自分のための備忘録ブログです。

Flashのクロスドメインセキュリティへの対処方法

FlashからherokuにデプロイしたサーバとHTTP通信をした際に、以下のエラーが発生したので、自分用に調べたことをまとめておきます。

SecurityError: Error #2060: セキュリティサンドボックス侵害

Flashの上記のエラーを解消する為には、参照先サーバのルートディレクトリにcrossdomain.xmlを配置する必要があります。

crossdomain.xmlについて

Flash では Web ブラウザで再生される SWF は、SWF の生成元となる Web ドメイン外にあるデータにはアクセスできません。セキュリティにおけるこのような制約に対する例外を作成するには、ポリシー ファイルを作成します。ポリシー ファイルは、crossdomain.xml という名前の XML ファイルでなくてはなりません。

crossdomain.xmlの読み込み例

Flashから外部サーバにある画像を読み込む為に"http://image-server?id=1"のURLにアクセスしたとします。

この際、Flashは最初に"http://image-server/crossdomain.xml"にアクセスをして、ホストサーバ上のcrossdomain.xmlを確認します。
この時crossdomain.xmlが存在しなかったり、アクセス可能ドメインとして設定されていない場合は、上記のSecurityErrorが発生します。

crossdomain.xmlの書き方

・全てのドメインを許可する

<cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:noNamespaceSchemaLocation="http://www.adobe.com/xml/schemas/PolicyFile.xsd">
  <allow-access-from domain="*"/>
</cross-domain-policy> 


・許可するドメインを指定する

<cross-domain-policy xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:noNamespaceSchemaLocation="http://www.adobe.com/xml/schemas/PolicyFile.xsd">
  <allow-access-from domain="*.example.com"/>
</cross-domain-policy> 


詳しくはこちらを参照すると分かりやすいです。