Skip to main content
Participant
October 24, 2017
Question

「*** Security Sandbox Violation ***」メッセージについて

  • October 24, 2017
  • 1 reply
  • 814 views

■開発環境

 FlashBuilder4.6

 

■作成したAirアプリケーション

 以下のAirのアプリケーション(mainAir)を作成しています。

 flash.display.Loaderクラスを使用して、Webサーバ(Tomcat)からremoteWeb.swf を load() して、

 Airアプリケーション内の UIComponent に addChild()する。

■疑問に思う事象

 

 FlashBuilder上でアプリケーションをデバッグ起動すると、

 コンソール内に以下のセキュリティに関するエラーメッセージが複数出力されます。

 

----- コンソール出力内容 ---

*** Security Sandbox Violation ***

SecurityDomain 'http://localhost:8400/hoge/remoteWeb.swf' tried to access incompatible context 'app:/mainAir.swf'

----------------------------

 さらに、

 Airアプリケーションウィンドウ上でremote.swfに該当する箇所をクリックすると、

 クリックする毎に上記のメッセージが出力されます。

 上記のようなメッセージが出力されますが、

 以下の点から、このAirアプリケーションは正常に動作しているのでは考えています。

 ・アプリケーションウィンドウ上には remoteWeb.swf が表示されている。

  →remoteWeb.swf内のLabel要素が表示されていることから確認。

 ・アプリケーションウィンドウ上の remoteWeb.swf の該当箇所をクリックすると

  remoteWeb.swf内で仕掛けたハンドラ(onClick())が起動する。

  →onClick()関数内の、trace()が動作していることから確認。

■質問

 上記のセキュリティに関するエラーメッセージが出力される理由を知りたいです。

 

 正常に動作しているように見えるのにも関わらず、

 セキュリティに関するエラーメッセージが出力されているため、

 本当に問題が無いかどうかの判断ができずに困っています。

■アプリケーションのコード

●メインのアプリケーション ※FlashBuilderでAirプロジェクトとして作成

-------------------------------------------------------------------------------------------------------------------

mainAir.mxml

-------------------------------------------------------------------------------------------------------------------

<?xml version="1.0" encoding="utf-8"?>

<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"

                       xmlns:s="library://ns.adobe.com/flex/spark"

                       xmlns:mx="library://ns.adobe.com/flex/mx"

                       creationComplete="onCompleteLoad()"

                       >

    <fx:Script>

        <![CDATA[

            import flash.net.URLRequest;

            import flash.system.LoaderContext;

            import mx.core.UIComponent;

                   

            private function onCompleteLoad():void {

                trace("Call onCompleteLoad()");   

                var loader:Loader = new Loader();

                var loader_context:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain);

                loader.load(new URLRequest("http://localhost:8400/hoge/remoteWeb.swf"), loader_context);

                uicomponent.addChild(loader);

            }   

           

        ]]>

    </fx:Script>   

    <mx:UIComponent id="uicomponent" width="100%" height="100%" >

    </mx:UIComponent>

</s:WindowedApplication>

-------------------------------------------------------------------------------------------------------------------

●remoteWeb.swf ※FlashBuilderでWebプロジェクトとして作成

-------------------------------------------------------------------------------------------------------------------

remoteWeb.mxml

-------------------------------------------------------------------------------------------------------------------

<?xml version="1.0" encoding="utf-8"?>

<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"

               xmlns:s="library://ns.adobe.com/flex/spark"

               xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600"

               click="onClick()"

               >

    <fx:Script>

        <![CDATA[       

            private function onClick():void {

                trace("Call onClick() !!!");   

            }

        ]]>

    </fx:Script>

    <s:Label text="これは remoteWeb.mxmlのラベル"/>

</s:Application>

-------------------------------------------------------------------------------------------------------------------

    This topic has been closed for replies.

    1 reply

    杉本_Author
    Participant
    October 26, 2017

    本件、特にコメント等ありませんでしたので英語側の方にも投稿しました。

    https://forums.adobe.com/thread/2401859

    KR-san
    Inspiring
    November 15, 2017

    適当で申し訳ないのですが、

    「クロスドメイン ポリシーファイル」とか「クロスドメインスクリプト」あたりで、

    検索したら対処できそうな気が……

    杉本_Author
    Participant
    November 16, 2017

    コメントありがとうございます。

    Airを使い始めて間もないので、おかしなことを言っているようで申し訳ありません。

    私の見解と試したことを記載します。

    問題として挙げた以下のメッセージですが、

    ----- コンソール出力内容 ---

    *** Security Sandbox Violation ***

    SecurityDomain 'http://localhost:8400/hoge/remoteWeb.swf' tried to access incompatible context 'app:/mainAir.swf'

    ----------------------------

    Webサーバから取得した remoteWeb.swf(以後、①)が、

    デスクトップ上で起動したAir上の app:/mainAir.swf(以後、②)に、

    何らかの理由でアクセス(適切な表現ではないかもしれませんが)しようとしたために生じたメッセージではないかと考えてます。

    そのため、

    Airアプリ上の②側が、①からのアクセスを受け入れるような対処が必要になると考えました。

    そこで、そもそもAirアプリ上で正しく動作するのかはわかりませんが、

    以下のような対処をしてみましたが、いずれも上手くは動作しませんでした。

    ②となる mainAir.mxml で、

    ・Security.allowDomain("*") を実行。

     →例外がスロー。

    ・crossdomain.xml を作成・配置(mainAir.swfと同じ場所)しておき、

      Security.loadPolicyFile("app:/crossdomain.xml")を実行

     →問題の警告のログは出力され続ける。