<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>fla.la &#187; security</title>
	<atom:link href="http://fla.la/archives/category/flash-player/security-flash-player/feed" rel="self" type="application/rss+xml" />
	<link>http://fla.la</link>
	<description>FLASH関連のネタを粛々とポストしていくのです。最近はUnion Platformに夢中</description>
	<lastBuildDate>Mon, 14 Dec 2009 04:46:45 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Loaderで読み込んだswfと読み出し元swf間のイベント伝達</title>
		<link>http://fla.la/archives/576</link>
		<comments>http://fla.la/archives/576#comments</comments>
		<pubDate>Mon, 14 Dec 2009 00:42:09 +0000</pubDate>
		<dc:creator>naoto koshikawa</dc:creator>
				<category><![CDATA[security]]></category>
		<category><![CDATA[Loader]]></category>

		<guid isPermaLink="false">http://fla.la/?p=576</guid>
		<description><![CDATA[Loaderに外部のswfを読み込んだ状態で、LoaderにMouseEvent.CLICKのイベントリスナーを設定しても反応しない、という現象に悩まされることが多々あります。 Loaderは、InteractiveObjectを継承しているので、MouseEventは受け取れるはずです。それに、Loaderにスタティックな画像(jpegやpngなど)を読み込んだ際には、LoaderにMouseEvent.CLICKのイベントリスナーを設定すれば、イベント拾えるんですよね。 これは以前、fla.la &#187; クロススクリプティングで紹介した ロード元swfファイルのDisplayObjectツリーと、ロードしたswfファイルのDisplayObjectツリー間のイベント伝達フロー が関係してきます。 そこでAdobe ActionScript 3.0 * クロススクリプトを読んでみますと、以下の記述があります。 親オブジェクトを所有する SWF ファイルは、ソースオブジェクトを所有する SWF ファイルのドメインを信頼するために、Security.allowDomain() メソッドを呼び出す必要があります。 ソースオブジェクトを所有する SWF ファイルは、親オブジェクトを所有する SWF ファイルのドメインを信頼するために、Security.allowDomain() メソッドを呼び出す必要があります。 つまり読み込んだexample.com/hoge.swfからexample.net/fugo.swfを読み込んで、イベント伝達を可能にするためには、お互いのドメインを引数にしたSecurity.allowDomain()を実行する必要があるということになります。 サンプルソース サンプルをwonderflに上げておきました。中央付近に表示されるキャラクターにMouseEvent.CLICKイベントのリスナーを登録していますが、クリックしても反応しません。 キャプチャーフェーズ、ターゲットフェーズ、バブリングフェーズすべてのフェーズでイベントが発生していないことがポイントです。 そこで、上部にある「Security.allowDomain()」というボタンをクリックしたあとで、キャラクターをクリックすると反応することが分かると思います。 Loaderで読み込んだswfと読み出し元swf間のイベント伝達例 &#8211; wonderfl build flash online なお、http://asmple.com/work/avatar3.swfでは以下のSecurity.allowDomain()が記述してあります。 Security.allowDomain&#40;&#34;wonderfl.net&#34;&#41;; Security.allowDomain&#40;&#34;swf.wonderfl.net&#34;&#41;;]]></description>
			<content:encoded><![CDATA[<p>Loaderに外部のswfを読み込んだ状態で、LoaderにMouseEvent.CLICKのイベントリスナーを設定しても反応しない、という現象に悩まされることが多々あります。</p>
<p>Loaderは、InteractiveObjectを継承しているので、MouseEventは受け取れるはずです。それに、Loaderにスタティックな画像(jpegやpngなど)を読み込んだ際には、LoaderにMouseEvent.CLICKのイベントリスナーを設定すれば、イベント拾えるんですよね。</p>
<p>これは以前、<a href="http://fla.la/archives/145">fla.la  &raquo; クロススクリプティング</a>で紹介した</p>
<blockquote><p>ロード元swfファイルのDisplayObjectツリーと、ロードしたswfファイルのDisplayObjectツリー間のイベント伝達フロー</p></blockquote>
<p>が関係してきます。</p>
<p>そこで<a href="http://help.adobe.com/ja_JP/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7c98.html">Adobe ActionScript 3.0 * クロススクリプト</a>を読んでみますと、以下の記述があります。</p>
<blockquote>
<ol>
<li>親オブジェクトを所有する SWF ファイルは、ソースオブジェクトを所有する SWF ファイルのドメインを信頼するために、Security.allowDomain() メソッドを呼び出す必要があります。</li>
<li>ソースオブジェクトを所有する SWF ファイルは、親オブジェクトを所有する SWF ファイルのドメインを信頼するために、Security.allowDomain() メソッドを呼び出す必要があります。</li>
</ol>
</blockquote>
<p>つまり読み込んだexample.com/hoge.swfからexample.net/fugo.swfを読み込んで、イベント伝達を可能にするためには、お互いのドメインを引数にしたSecurity.allowDomain()を実行する必要があるということになります。</p>
<h2>サンプルソース</h2>
<p>サンプルをwonderflに上げておきました。中央付近に表示されるキャラクターにMouseEvent.CLICKイベントのリスナーを登録していますが、クリックしても反応しません。</p>
<p>キャプチャーフェーズ、ターゲットフェーズ、バブリングフェーズすべてのフェーズでイベントが発生していないことがポイントです。</p>
<p>そこで、上部にある「Security.allowDomain()」というボタンをクリックしたあとで、キャラクターをクリックすると反応することが分かると思います。</p>
<div style="text-align:center;width:465px;"><iframe title="Loaderで読み込んだswfと読み出し元swf間のイベント伝達例 - wonderfl build flash online" scrolling="no" src="http://wonderfl.net/blogparts/cfcc2cb2078020bb10b3498a38bb1c9ed18cbd14" width="465" height="490" style="border:1px black solid;"></iframe><a href="http://wonderfl.net/code/cfcc2cb2078020bb10b3498a38bb1c9ed18cbd14" title="Loaderで読み込んだswfと読み出し元swf間のイベント伝達例 - wonderfl build flash online">Loaderで読み込んだswfと読み出し元swf間のイベント伝達例 &#8211; wonderfl build flash online</a></div>
<p>なお、http://asmple.com/work/avatar3.swfでは以下のSecurity.allowDomain()が記述してあります。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #004993;">Security</span>.<span style="color: #004993;">allowDomain</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;wonderfl.net&quot;</span><span style="color: #000000;">&#41;</span>;
<span style="color: #004993;">Security</span>.<span style="color: #004993;">allowDomain</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;swf.wonderfl.net&quot;</span><span style="color: #000000;">&#41;</span>;</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://fla.la/archives/576/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>クロススクリプティング</title>
		<link>http://fla.la/archives/145</link>
		<comments>http://fla.la/archives/145#comments</comments>
		<pubDate>Tue, 25 Aug 2009 13:00:53 +0000</pubDate>
		<dc:creator>naoto koshikawa</dc:creator>
				<category><![CDATA[Flash Player]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[allowDomain]]></category>
		<category><![CDATA[crossdomain]]></category>

		<guid isPermaLink="false">http://fla.la/?p=145</guid>
		<description><![CDATA[本エントリーでは、FLASH Playerのセキュリティのうちクロススクリプティングに焦点を当てます。外部リソースを利用する際のポリシーファイルに関しては、fla.la &#187; crossdomain.xmlをご覧下さい。 AdobeのFlash Playerデベロッパーセンターにある以下の記事が参考になります。 より安全なSWF Webアプリケーション クロススクリプティングとは fla.la &#187; crossdomain.xmlでも紹介した通り、Flash Playerのセキュリティに関しては、AdobeのActionScript3のドキュメントのFlash Player セキュリティに詳しく掲載されています。 ではクロススクリプティングとはどんな操作を指すのかまとめてみます。 Loaderクラスのcontent変数を通じて、ロードしたswfファイルを参照するオブジェクトを取得する ロードしたswfファイル内に定義されたプロパティにアクセスする ロードしたswfファイル内に定義されたメソッドを実行する ロードしたswfファイル内に定義されたクラスを参照する BitmapDataクラスのdrawメソッドを通じて、ロードしたswfファイルのピクセルをBitmapDataクラスのインスタンスへコピーする ロード元swfファイルのDisplayObjectツリーと、ロードしたswfファイルのDisplayObjectツリー間を移動する ロード元swfファイルのDisplayObjectツリーと、ロードしたswfファイルのDisplayObjectツリー間のイベント伝達フロー フローを確認 外部リソースをロードするswfを main.swf、外部リソースをresource.swfとします。 同一ドメインから外部リソースをロードする swfのドメインをswf.example.comとすると、フローは以下のようになります。 http://swf.exapmle.com/main.swfへアクセス main.swfを受け取る main.swfからhttp://swf.exapmle.com/resource.swfをロードする resource.swfを受け取る resource.swfに定義されている変数、メソッド、クラスにアクセスする 同一ドメイン内のswfファイルを扱う際には、簡単ですね。 別ドメインから外部リソースをロードする main.swfからresource.swfをロードする2つの方法を紹介します。 Loaderを使う URLLoaderを使う Loaderを使う場合 外部リソースに対してクロススクリプティングを行う際には、外部リソースにおいて、ロード元のswfのドメインからのアクセスの許可が必要です。 resource.swf内では以下の記述が必要です。 Security.allowDomain&#40;&#34;swf.example.com&#34;&#41;; フローは以下のようになります。 http://swf.exapmle.com/main.swfへアクセス main.swfを受け取る main.swfからhttp://other.exapmle.net/resource.swfをロードする resource.swfを受け取る resource.swfでSecurity.allowDomain(&#8220;swf.example.com&#8221;);を確認 resource.swfに定義されている変数、メソッド、クラスにアクセスする URLLoaderを使う場合 基本的に、外部リソースに対してクロススクリプティングを行う際には、外部リソースにおいて、ロード元のswfのドメインからのアクセスの許可が必要です。 但し、URLLoaderを使い、ロードしたURLLoaderインスタンスのdataプロパティをLoaderインスタンスのloadBytesメソッドに渡す事で、外部リソースに対してクロススクリプティングが可能です。 これは、LoaderインスタンスのloadBytes()メソッドでは、ロードされた SWF ファイルが常にロード元 [...]]]></description>
			<content:encoded><![CDATA[<p>本エントリーでは、FLASH Playerのセキュリティのうちクロススクリプティングに焦点を当てます。外部リソースを利用する際のポリシーファイルに関しては、<a href="http://fla.la/archives/64">fla.la &raquo; crossdomain.xml</a>をご覧下さい。</p>
<p>AdobeのFlash Playerデベロッパーセンターにある以下の記事が参考になります。</p>
<blockquote><p>
<cite><a href="http://www.adobe.com/jp/devnet/flashplayer/articles/secure_swf_apps.html">より安全なSWF Webアプリケーション</a></cite>
</p></blockquote>
<h3>クロススクリプティングとは</h3>
<p><a href="http://fla.la/archives/64">fla.la &raquo; crossdomain.xml</a>でも紹介した通り、Flash Playerのセキュリティに関しては、AdobeのActionScript3のドキュメントの<a href="http://help.adobe.com/ja_JP/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7d23.html">Flash Player セキュリティ</a>に詳しく掲載されています。</p>
<p>ではクロススクリプティングとはどんな操作を指すのかまとめてみます。<br />
<span id="more-145"></span></p>
<ul>
<li>Loaderクラスのcontent変数を通じて、ロードしたswfファイルを参照するオブジェクトを取得する</li>
<li>ロードしたswfファイル内に定義されたプロパティにアクセスする</li>
<li>ロードしたswfファイル内に定義されたメソッドを実行する</li>
<li>ロードしたswfファイル内に定義されたクラスを参照する</li>
<li>BitmapDataクラスのdrawメソッドを通じて、ロードしたswfファイルのピクセルをBitmapDataクラスのインスタンスへコピーする</li>
<li>ロード元swfファイルのDisplayObjectツリーと、ロードしたswfファイルのDisplayObjectツリー間を移動する</li>
<li>ロード元swfファイルのDisplayObjectツリーと、ロードしたswfファイルのDisplayObjectツリー間のイベント伝達フロー</li>
</ul>
<h3>フローを確認</h3>
<p>外部リソースをロードするswfを main.swf、外部リソースをresource.swfとします。</p>
<h4>同一ドメインから外部リソースをロードする</h4>
<p>swfのドメインをswf.example.comとすると、フローは以下のようになります。<br />
<div id="attachment_153" class="wp-caption aligncenter" style="width: 525px"><img src="http://fla.la/wp-content/uploads/2009/08/cross_scripting_001.png" alt="同一ドメインのswfでクロススクリプティング" title="同一ドメインのswfでクロススクリプティング" width="515" height="591" class="size-full wp-image-153" /><p class="wp-caption-text">同一ドメインのswfでクロススクリプティング</p></div></p>
<ol>
<li>http://swf.exapmle.com/main.swfへアクセス</li>
<li>main.swfを受け取る</li>
<li>main.swfからhttp://swf.exapmle.com/resource.swfをロードする</li>
<li>resource.swfを受け取る</li>
<li>resource.swfに定義されている変数、メソッド、クラスにアクセスする</li>
</ol>
<p>同一ドメイン内のswfファイルを扱う際には、簡単ですね。</p>
<h4>別ドメインから外部リソースをロードする</h4>
<p>main.swfからresource.swfをロードする2つの方法を紹介します。</p>
<ul>
<li>Loaderを使う</li>
<li>URLLoaderを使う</li>
</ul>
<h5>Loaderを使う場合</h5>
<p>外部リソースに対してクロススクリプティングを行う際には、外部リソースにおいて、ロード元のswfのドメインからのアクセスの許可が必要です。</p>
<p>resource.swf内では以下の記述が必要です。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">Security.<span style="color: #0066CC;">allowDomain</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;swf.example.com&quot;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>フローは以下のようになります。<br />
<div id="attachment_207" class="wp-caption aligncenter" style="width: 638px"><img src="http://fla.la/wp-content/uploads/2009/08/cross_scripting_002.png" alt="別ドメインのswfでクロススクリプティング Loader" title="別ドメインのswfでクロススクリプティング Loader" width="628" height="695" class="size-full wp-image-207" /><p class="wp-caption-text">別ドメインのswfでクロススクリプティング Loader</p></div></p>
<ol>
<li>http://swf.exapmle.com/main.swfへアクセス</li>
<li>main.swfを受け取る</li>
<li>main.swfからhttp://other.exapmle.net/resource.swfをロードする</li>
<li>resource.swfを受け取る</li>
<li>resource.swfでSecurity.allowDomain(&#8220;swf.example.com&#8221;);を確認</li>
<li>resource.swfに定義されている変数、メソッド、クラスにアクセスする</li>
</ol>
<h5>URLLoaderを使う場合</h5>
<p>基本的に、外部リソースに対してクロススクリプティングを行う際には、外部リソースにおいて、ロード元のswfのドメインからのアクセスの許可が必要です。</p>
<p>但し、URLLoaderを使い、ロードしたURLLoaderインスタンスのdataプロパティをLoaderインスタンスのloadBytesメソッドに渡す事で、外部リソースに対してクロススクリプティングが可能です。</p>
<p>これは、LoaderインスタンスのloadBytes()メソッドでは、ロードされた SWF ファイルが常にロード元 SWF ファイルのセキュリティドメインに配置されるためです。</p>
<p>その際、URLLoaderインスタンスのloadメソッドは、データのロードにあたるので、外部リソースのドメインに配置したポリシーファイルにおいてロード元のドメインが許可されている必要があります。</p>
<p>http://other.example.net/crossdomain.xmlの内容の一例は以下のようになります。</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #00bbdd;">&lt;!DOCTYPE cross-domain-policy SYSTEM &quot;http://www.adobe.com/xml/dtds/cross-domain-policy.dtd&quot;&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;cross-domain-policy<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;site-control</span> <span style="color: #000066;">permitted-cross-domain-policies</span>=<span style="color: #ff0000;">&quot;master-only&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;allow-access-from</span> <span style="color: #000066;">domain</span>=<span style="color: #ff0000;">&quot;swf.example.com&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/cross-domain-policy<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>フローは以下のようになります。</p>
<div id="attachment_208" class="wp-caption aligncenter" style="width: 638px"><img src="http://fla.la/wp-content/uploads/2009/08/cross_scripting_003.png" alt="別ドメインのswfでクロススクリプティング URLLoader" title="別ドメインのswfでクロススクリプティング URLLoader" width="628" height="790" class="size-full wp-image-208" /><p class="wp-caption-text">別ドメインのswfでクロススクリプティング URLLoader</p></div>
<ol>
<li>http://swf.exapmle.com/main.swfへアクセス</li>
<li>main.swfを受け取る</li>
<li>http://other.example.net/crossdomain.xmlへアクセス</li>
<li>crossdomain.xmlを受け取る</li>
<li>main.swfからhttp://other.exapmle.net/resource.swfをロードする</li>
<li>resource.swfを受け取る</li>
<li>resource.swfに定義されている変数、メソッド、クラスにアクセスする</li>
</ol>
<h3>ロードのサンプル</h3>
<p>ここでサンプルとして、以下のようなpublicメソッドを持つ簡易アバターを作成しました。</p>
<table class="data_table">
<caption>簡易アバターのAPI</caption>
<thead>
<tr>
<th>API</th>
<th>機能</th>
</tr>
</thead>
<tbody>
<tr>
<td>front</td>
<td>アバターが前を向きます</td>
</tr>
<tr>
<td>back</td>
<td>アバターが後を向きます</td>
</tr>
<tr>
<td>left</td>
<td>アバターが左を向きます</td>
</tr>
<tr>
<td>right</td>
<td>アバターが右を向きます</td>
</tr>
<tr>
<td>play</td>
<td>アバターがアニメーションします</td>
</tr>
</tbody>
</table>
<p>簡易アバターのURLは以下となります。<br />
avatar1.swfとavatar2.swfはまったく同じ機能をもったswfですが、下記の記述はavatar2.swfにしかありません。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript" style="font-family:monospace;">Security.<span style="color: #0066CC;">allowDomain</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">&quot;fla.la&quot;</span><span style="color: #66cc66;">&#41;</span>;</pre></div></div>

<p>つまり、avatar2.swfはfla.laドメインに配置されたswfからパブリックメソッドを実行出来ます。</p>
<p>では、LoaderとURLLoaderでこれらの簡易アバターをロードしたのち、クロススクリプティングで操作するコードを紹介します。</p>
<h4>Loaderを使う際のサンプルコード</h4>
<p>以下をドキュメントクラスとするswfをfla.laドメインへ配置するとします。</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span>  
<span style="color: #000000;">&#123;</span>
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span>.<span style="color: #004993;">Loader</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span>.<span style="color: #004993;">Sprite</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.events</span>.<span style="color: #004993;">Event</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.net</span>.<span style="color: #004993;">URLLoader</span>;
&nbsp;
	<span style="color: #3f5fbf;">/**
	 * 外部リソースをLoaderでロードしてからメソッドにアクセス
	 * @author naoto koshikawa
	 */</span>
	<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> CrossScript1 extends <span style="color: #004993;">Sprite</span>
	<span style="color: #000000;">&#123;</span>
		<span style="color: #009900;">//----------------------------------------------------------------------</span>
		<span style="color: #009900;">//  methods</span>
		<span style="color: #009900;">//----------------------------------------------------------------------</span>
		<span style="color: #009900;">//------------------------------</span>
		<span style="color: #009900;">//  public methods</span>
		<span style="color: #009900;">//------------------------------</span>
		<span style="color: #3f5fbf;">/**
		 * constructor
		 */</span>
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> CrossScript1<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> 
		<span style="color: #000000;">&#123;</span>
			<span style="color: #6699cc; font-weight: bold;">var</span> avatar<span style="color: #000000; font-weight: bold;">:*</span>;
&nbsp;
			<span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">loader</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Loader</span> = <span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">Loader</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
			<span style="color: #004993;">loader</span>.<span style="color: #004993;">contentLoaderInfo</span>.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span>
				<span style="color: #004993;">Event</span>.<span style="color: #004993;">COMPLETE</span>, 
				<span style="color: #339966; font-weight: bold;">function</span><span style="color: #000000;">&#40;</span>event<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Event</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
				<span style="color: #000000;">&#123;</span>
					avatar = <span style="color: #004993;">loader</span>.<span style="color: #004993;">content</span>; <span style="color: #009900;">// avatar1.swfだとここでエラー</span>
					<span style="color: #004993;">addChild</span><span style="color: #000000;">&#40;</span>avatar<span style="color: #000000;">&#41;</span>;
					avatar.<span style="color: #004993;">play</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
				<span style="color: #000000;">&#125;</span>
			<span style="color: #000000;">&#41;</span>;
			<span style="color: #004993;">loader</span>.<span style="color: #004993;">load</span><span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">URLLoader</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;http://asmple.com/work/avatar2.swf&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>	
	<span style="color: #000000;">&#125;</span>	
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<p>32行目の処理は、Loaderクラスのcontent変数を通じて、ロードしたswfファイルを参照するオブジェクトを取得することに該当するので、外部リソースのswfでSecurity.allowDomain()メソッドの処理が必要となります。</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>30
31
32
33
34
35
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;">				<span style="color: #339966; font-weight: bold;">function</span><span style="color: #000000;">&#40;</span>event<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Event</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
				<span style="color: #000000;">&#123;</span>
					avatar = <span style="color: #004993;">loader</span>.<span style="color: #004993;">content</span>; <span style="color: #009900;">// avatar1.swfだとここでエラー</span>
					<span style="color: #004993;">addChild</span><span style="color: #000000;">&#40;</span>avatar<span style="color: #000000;">&#41;</span>;
					avatar.<span style="color: #004993;">play</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
				<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<h4>URLLoaderを使う</h4>
<p>以下をドキュメントクラスとするswfをfla.laドメインへ配置するとします。URLLoaderを使う場合はavatar1.swfでもavatar2.swfでもロードした後に、アニメーションを開始することが可能です。<br />
但し、http://asmple.com/crossdomain.xmlにて以下の記述が必要となります。</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #00bbdd;">&lt;!DOCTYPE cross-domain-policy SYSTEM &quot;http://www.adobe.com/xml/dtds/cross-domain-policy.dtd&quot;&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;cross-domain-policy<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;site-control</span> <span style="color: #000066;">permitted-cross-domain-policies</span>=<span style="color: #ff0000;">&quot;master-only&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;allow-access-from</span> <span style="color: #000066;">domain</span>=<span style="color: #ff0000;">&quot;fla.la&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/cross-domain-policy<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
</pre></td><td class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #9900cc; font-weight: bold;">package</span>  
<span style="color: #000000;">&#123;</span>
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span>.<span style="color: #004993;">Loader</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.display</span>.<span style="color: #004993;">Sprite</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.events</span>.<span style="color: #004993;">Event</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.net</span>.<span style="color: #004993;">URLLoader</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.net</span>.<span style="color: #004993;">URLLoaderDataFormat</span>;
	<span style="color: #0033ff; font-weight: bold;">import</span> <span style="color: #004993;">flash.net</span>.<span style="color: #004993;">URLRequest</span>;
&nbsp;
	<span style="color: #3f5fbf;">/**
	 * 外部リソースをURLLoaderでロードしてからメソッドにアクセス
	 * @author naoto koshikawa
	 */</span>
	<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #9900cc; font-weight: bold;">class</span> CrossScript2 extends <span style="color: #004993;">Sprite</span>
	<span style="color: #000000;">&#123;</span>
		<span style="color: #009900;">//----------------------------------------------------------------------</span>
		<span style="color: #009900;">//  methods</span>
		<span style="color: #009900;">//----------------------------------------------------------------------</span>
		<span style="color: #009900;">//------------------------------</span>
		<span style="color: #009900;">//  public methods</span>
		<span style="color: #009900;">//------------------------------</span>
		<span style="color: #3f5fbf;">/**
		 * constructor
		 */</span>
		<span style="color: #0033ff; font-weight: bold;">public</span> <span style="color: #339966; font-weight: bold;">function</span> CrossScript2<span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span> 
		<span style="color: #000000;">&#123;</span>
			<span style="color: #6699cc; font-weight: bold;">var</span> avatar<span style="color: #000000; font-weight: bold;">:*</span>;
&nbsp;
			<span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">loader</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Loader</span> = <span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">Loader</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
			<span style="color: #004993;">loader</span>.<span style="color: #004993;">contentLoaderInfo</span>.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span>
				<span style="color: #004993;">Event</span>.<span style="color: #004993;">COMPLETE</span>, 
				<span style="color: #339966; font-weight: bold;">function</span><span style="color: #000000;">&#40;</span>event<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Event</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
				<span style="color: #000000;">&#123;</span>
					avatar = <span style="color: #004993;">loader</span>.<span style="color: #004993;">content</span>;
					<span style="color: #004993;">addChild</span><span style="color: #000000;">&#40;</span>avatar<span style="color: #000000;">&#41;</span>;
					avatar.<span style="color: #004993;">play</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
				<span style="color: #000000;">&#125;</span>
			<span style="color: #000000;">&#41;</span>;
&nbsp;
			<span style="color: #6699cc; font-weight: bold;">var</span> urlLoader<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">URLLoader</span> = <span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">URLLoader</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
			urlLoader.<span style="color: #004993;">dataFormat</span> = <span style="color: #004993;">URLLoaderDataFormat</span>.<span style="color: #004993;">BINARY</span>;
			urlLoader.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span>
				<span style="color: #004993;">Event</span>.<span style="color: #004993;">COMPLETE</span>, 
				<span style="color: #339966; font-weight: bold;">function</span><span style="color: #000000;">&#40;</span>event<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Event</span><span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
				<span style="color: #000000;">&#123;</span>
					<span style="color: #004993;">loader</span>.<span style="color: #004993;">loadBytes</span><span style="color: #000000;">&#40;</span>urlLoader.<span style="color: #004993;">data</span><span style="color: #000000;">&#41;</span>;
				<span style="color: #000000;">&#125;</span>
			<span style="color: #000000;">&#41;</span>;
			urlLoader.<span style="color: #004993;">load</span><span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">URLRequest</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;http://asmple.com/work/avatar1.swf&quot;</span><span style="color: #000000;">&#41;</span><span style="color: #000000;">&#41;</span>;
		<span style="color: #000000;">&#125;</span>	
	<span style="color: #000000;">&#125;</span>	
<span style="color: #000000;">&#125;</span></pre></td></tr></table></div>

<h3>動くサンプル</h3>
<p>別ドメインの外部リソースのメッソドにアクセスする例を紹介します。</p>
<h4>Loaderを用いた実例</h4>
<ul>
<li>http://fla.la/swf/cross_script3.swf</li>
</ul>
<p>から、先ほども紹介した</p>
<ul>
<li>http://asmple.com/work/avatar1.swf</li>
<li>http://asmple.com/work/avatar2.swf</li>
</ul>
<p>をロードします。先の例に照らし合わせると、cross_script3.swfがmain.swfでavatar1.swf, avatar2.swfがresource.swfとなります。</p>
<p>以上を踏まえて、以下のサンプルを触ってみて下さい。ロードするswfを選択してloadボタンをクリックするとswfがロードされます。ロードされたswfの周りに配置されたup, right, down, leftの各ボタンはswfに定義されたメソッドを実行します。</p>

    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="swfobj_0" width="256" height="160">
      <param name="movie" value="http://fla.la/swf/cross_script3.swf" />
      <!--[if !IE]>-->
      <object type="application/x-shockwave-flash" data="http://fla.la/swf/cross_script3.swf" width="256" height="160">
      <!--<![endif]-->
        <p>The Flash plugin is required to view this object.</p>
      <!--[if !IE]>-->
      </object>
      <!--<![endif]-->
    </object>

<p>実行すると分かるように、avatar1.swfをロードした後に、up, right, down, leftの各ボタンをクリックするとSecurityErrorが発生しますが、avatar2.swfではロードされたswfがアニメーションを開始します。</p>
<h4>URLLoaderを用いた実例</h4>
<p>まったく同じサンプルですが、LoaderではなくURLLoaderを用いて外部リソースをロードしています。</p>
<ul>
<li>http://fla.la/swf/cross_script4.swf</li>
</ul>
<p>から</p>
<ul>
<li>http://asmple.com/work/avatar1.swf</li>
<li>http://asmple.com/work/avatar2.swf</li>
</ul>
<p>をロードします。先の例に照らし合わせると、cross_script4.swfがmain.swfでavatar1.swf, avatar2.swfがresource.swfとなります。</p>

    <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="swfobj_1" width="256" height="160">
      <param name="movie" value="http://fla.la/swf/cross_script4.swf" />
      <!--[if !IE]>-->
      <object type="application/x-shockwave-flash" data="http://fla.la/swf/cross_script4.swf" width="256" height="160">
      <!--<![endif]-->
        <p>The Flash plugin is required to view this object.</p>
      <!--[if !IE]>-->
      </object>
      <!--<![endif]-->
    </object>

<p>こちらの例では、avatar1.swfでもアバターの操作が出来る事と、avatar1.swf, avatar2.swfをロードする際に</p>
<ul>
<li>http://asmple.com/crossdomain.xml</li>
</ul>
<p>をリクエストしていることが確認出来ると思います。</p>
<p>firefoxをお使いの方は、<a href="https://addons.mozilla.org/ja/firefox/addon/3829">Live HTTP Headers</a>や<a href="https://addons.mozilla.org/ja/firefox/addon/1843">firebug</a>を使うと簡単に確認出来ます。</p>
<div id="attachment_206" class="wp-caption aligncenter" style="width: 400px"><img src="http://fla.la/wp-content/uploads/2009/08/cross_script2.swf.png" alt="crossdomain.xmlを取得する様子をfirebugで確認" title="crossdomain.xmlを取得する様子をfirebugで確認" width="390" height="297" class="size-full wp-image-206" /><p class="wp-caption-text">crossdomain.xmlを取得する様子をfirebugで確認</p></div>
<p>crossdomain.xmlのロードはキャッシュするので、ロードの確認の際にはブラウザのキャッシュをクリアしてからお試し下さい。</p>
<h4>おまけ(wonderflの例)</h4>
<p>wonderflに投稿したswfは同一ドメイン swf.wonderfl.net に存在するため、crossdomain.xml も allowDomain も 使わずに他の投稿をロードして使うことが出来ます。</p>
<p>ただし、以下のようにブログパーツとして貼り付ける場合はwonderfl.netドメインのswfファイルを利用するようなので、リソース側のswfに以下の記述が必要です。(このエントリーを書きながら気づきました)</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #004993;">Security</span>.<span style="color: #004993;">allowDomain</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;wonderfl.net&quot;</span><span style="color: #000000;">&#41;</span>;</pre></div></div>

<h5>ロードするswf</h5>
<p>本エントリーの例では外部リソース resource.swfにあたります。</p>
<div style="text-align:center;width:465px;"><iframe title="シンプルアバター君 - wonderfl build flash online" scrolling="no" src="http://wonderfl.net/blogparts/afe5412cf117b348681e9eb6e3595035cabd06e6" width="465" height="490" style="border:1px black solid;"></iframe><a href="http://wonderfl.net/code/afe5412cf117b348681e9eb6e3595035cabd06e6" title="シンプルアバター君 - wonderfl build flash online">シンプルアバター君 &#8211; wonderfl build flash online</a></div>
<h5>ロード元swf</h5>
<p>本エントリーの例では外部リソース main.swfにあたります。</p>
<div style="text-align:center;width:465px;"><iframe title="wonderflに投稿したswfを別の投稿から使うテスト - wonderfl build flash online" scrolling="no" src="http://wonderfl.net/blogparts/f7349f86bc5a7bcfd120dde85547bd87ba7ccfc5" width="465" height="490" style="border:1px black solid;"></iframe><a href="http://wonderfl.net/code/f7349f86bc5a7bcfd120dde85547bd87ba7ccfc5" title="wonderflに投稿したswfを別の投稿から使うテスト - wonderfl build flash online">wonderflに投稿したswfを別の投稿から使うテスト &#8211; wonderfl build flash online</a></div>
<p>他の投稿から使うライブラリ的なswfを投稿してみんなに使ってもらうことも出来そうですね。ちなみに、</p>
<p>ちなみに、wonderflに投稿したswfのurlは以下のように取れます。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #6699cc; font-weight: bold;">var</span> swfURL<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> = <span style="color: #004993;">loaderInfo</span>.<span style="color: #004993;">url</span>;</pre></div></div>

<p>wonderflにも投稿してあります。</p>
<div style="text-align:center;width:465px;"><iframe title="swfの置いてあるBaseパスを取得 - wonderfl build flash online" scrolling="no" src="http://wonderfl.net/blogparts/0fb7a21004d484c5cda2dd5d7b3b546cd504e1e1" width="465" height="490" style="border:1px black solid;"></iframe><a href="http://wonderfl.net/code/0fb7a21004d484c5cda2dd5d7b3b546cd504e1e1" title="swfの置いてあるBaseパスを取得 - wonderfl build flash online">swfの置いてあるBaseパスを取得 &#8211; wonderfl build flash online</a></div>
<h3>まとめ</h3>
<p>別ドメインの外部リソースを扱う際には、Loaderを使うのか、URLLoaderを使うのかによって、クロススクリプティングをする際にチェックするポイントが異なります。</p>
<p>外部リソースのswfを扱うことで柔軟なflashアプリケーションを作成していきたいと思います。</p>
]]></content:encoded>
			<wfw:commentRss>http://fla.la/archives/145/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>crossdomain.xml</title>
		<link>http://fla.la/archives/64</link>
		<comments>http://fla.la/archives/64#comments</comments>
		<pubDate>Thu, 13 Aug 2009 10:08:07 +0000</pubDate>
		<dc:creator>naoto koshikawa</dc:creator>
				<category><![CDATA[Flash Player]]></category>
		<category><![CDATA[security]]></category>
		<category><![CDATA[crossdomain]]></category>

		<guid isPermaLink="false">http://fla.la/?p=64</guid>
		<description><![CDATA[本エントリーでは、FLASH Playerのセキュリティのうち外部リソースを利用する際のポリシーファイルに焦点を当てます。 ポリシーファイルとはcrossdomain.xmlを指します。なお、ソケットポリシーファイルは別の機会に投稿する予定です。クロススクリプティングに関しても別の機会に。 なお本エントリーでは、ActionScript 3.0 でパブリッシュされ、Flash Player 9.0.124.0 以降で実行されるものについて考察していきます。 セキュリティドメイン crossdomain.xmlはセキュリティドメインと非常に密接な関係があります。swfファイルのセキュリティドメインは以下のコードで確認出来ます。 trace&#40;flash.system.Security.sandboxType&#41;; 表示される値は表1に示した、いずれかの値となるはずです。 表1. セキュリティドメインの種類 flash.system.Security.sandboxType 説明 remote インターネット上に公開されているswfファイル localTrusted グロバールセキュリティ設定で信頼設定にしている場所のswfとFLASHオーサリングツールから「ムービープレビュー」で再生した際のswfファイル localWithFile グロバールセキュリティ設定で信頼設定にしていない場所のswfかつ、パブリッシュ設定で「ローカルでの再生に関するセキュリティ」を「ローカルファイルにのみアクセスする」に設定したswfファイル localWithNetwork 上記の「ローカルでの再生に関するセキュリティ」を「ネットワークにのみアクセスする」に設定したswfファイル 以降、flash.system.Security.sandboxTypeの値がremote、つまりインターネット上に公開されているswfファイルを対象に話を進めていきます。もちろん、インターネット上に公開されているswfファイルをローカルに保存して実行すればremoteではなくなります。 余談 wonderflに投稿したスクリプトを見ていただくと、flash.system.Security.sandboxTypeを出力するとremoteとなることが確認出来ます。 Flash Playerのセキュリティ AdobeのActionScript3のドキュメントにあるFlash Player セキュリティにとても詳しく記載されています。 コンテンツのロード Flash Player セキュリティにあるとおり、以下のメソッドは、コンテンツのロードと見なされます。 flash.display.Loader.load&#40;&#41;; flash.media.Sound.load&#40;&#41;; flash.net.NetStream.play&#40;&#41;; TextFieldを使った以下のような処理も、コンテンツのロードと見なされます。 var imageURL:String = &#34;http://fla.la/wp-content/uploads/2009/08/yappaributa75x75.jpg&#34;; var textField:TextField = new TextField&#40;&#41;; textField.width = 100; textField.height = [...]]]></description>
			<content:encoded><![CDATA[<p>本エントリーでは、FLASH Playerのセキュリティのうち外部リソースを利用する際のポリシーファイルに焦点を当てます。<br />
ポリシーファイルとはcrossdomain.xmlを指します。なお、ソケットポリシーファイルは別の機会に投稿する予定です。クロススクリプティングに関しても別の機会に。</p>
<p>なお本エントリーでは、ActionScript 3.0 でパブリッシュされ、Flash Player 9.0.124.0 以降で実行されるものについて考察していきます。</p>
<p><span id="more-64"></span></p>
<h3>セキュリティドメイン</h3>
<p>crossdomain.xmlはセキュリティドメインと非常に密接な関係があります。swfファイルのセキュリティドメインは以下のコードで確認出来ます。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #004993;">trace</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">flash.system</span>.<span style="color: #004993;">Security</span>.<span style="color: #004993;">sandboxType</span><span style="color: #000000;">&#41;</span>;</pre></div></div>

<p>表示される値は表1に示した、いずれかの値となるはずです。</p>
<table class="data_table">
<caption>表1. セキュリティドメインの種類</caption>
<thead>
<tr>
<th>flash.system.Security.sandboxType</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<td>remote</td>
<td>インターネット上に公開されているswfファイル</td>
</tr>
<tr>
<td>localTrusted</td>
<td><a href="http://www.macromedia.com/support/documentation/jp/flashplayer/help/settings_manager04.html">グロバールセキュリティ設定</a>で信頼設定にしている場所のswfとFLASHオーサリングツールから「ムービープレビュー」で再生した際のswfファイル</td>
</tr>
<tr>
<td>localWithFile</td>
<td><a href="http://www.macromedia.com/support/documentation/jp/flashplayer/help/settings_manager04.html">グロバールセキュリティ設定</a>で信頼設定にしていない場所のswfかつ、パブリッシュ設定で「ローカルでの再生に関するセキュリティ」を「ローカルファイルにのみアクセスする」に設定したswfファイル</td>
</tr>
<tr>
<td>localWithNetwork</td>
<td>上記の「ローカルでの再生に関するセキュリティ」を「ネットワークにのみアクセスする」に設定したswfファイル</td>
</tr>
</tbody>
</table>
<p>以降、flash.system.Security.sandboxTypeの値がremote、つまりインターネット上に公開されているswfファイルを対象に話を進めていきます。もちろん、インターネット上に公開されているswfファイルをローカルに保存して実行すればremoteではなくなります。</p>
<h4>余談</h4>
<p><a href="http://wonderfl.net/code/a45a0cf61da2f5504628332539b3a28926e40611">wonderflに投稿したスクリプト</a>を見ていただくと、flash.system.Security.sandboxTypeを出力するとremoteとなることが確認出来ます。</p>
<h3>Flash Playerのセキュリティ</h3>
<p>AdobeのActionScript3のドキュメントにある<a href="http://help.adobe.com/ja_JP/ActionScript/3.0_ProgrammingAS3/WS5b3ccc516d4fbf351e63e3d118a9b90204-7d23.html">Flash Player セキュリティ</a>にとても詳しく記載されています。</p>
<h4>コンテンツのロード</h4>
<p>Flash Player セキュリティにあるとおり、以下のメソッドは、コンテンツのロードと見なされます。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #004993;">flash.display</span>.<span style="color: #004993;">Loader</span>.<span style="color: #004993;">load</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
<span style="color: #004993;">flash.media</span>.<span style="color: #004993;">Sound</span>.<span style="color: #004993;">load</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
<span style="color: #004993;">flash.net</span>.<span style="color: #004993;">NetStream</span>.<span style="color: #004993;">play</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;</pre></div></div>

<p>TextFieldを使った以下のような処理も、コンテンツのロードと見なされます。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #6699cc; font-weight: bold;">var</span> imageURL<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">String</span> = <span style="color: #990000;">&quot;http://fla.la/wp-content/uploads/2009/08/yappaributa75x75.jpg&quot;</span>;
<span style="color: #6699cc; font-weight: bold;">var</span> textField<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">TextField</span> = <span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">TextField</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
textField.<span style="color: #004993;">width</span> = <span style="color: #000000; font-weight:bold;">100</span>;
textField.<span style="color: #004993;">height</span> = <span style="color: #000000; font-weight:bold;">100</span>;
textField.<span style="color: #004993;">htmlText</span> = <span style="color: #990000;">' &lt;img src=&quot;'</span> <span style="color: #000000; font-weight: bold;">+</span> imageURL <span style="color: #000000; font-weight: bold;">+</span> <span style="color: #990000;">'&quot; width=&quot;75&quot; height=&quot;75&quot;&gt;'</span>;</pre></div></div>

<p>RTMPを利用したサーバを通じて送信されたコンテンツもコンテンツのロードと見なされます。<br />
(ただしサーバの設定によって制限をかけることも可能)</p>
<p>これらのメソッドや処理では特に制限なくswfファイルと別のドメインから以下の種類の外部リソースを読み込むことが可能です。</p>
<ul>
<li>swfファイル</li>
<li>イメージ(JPG, GIF, PNG)</li>
<li>サウンド</li>
<li>ムービー</li>
</ul>
<h4>ロードされたメディアへのデータとしてのアクセス</h4>
<p>Flash Player セキュリティにあるとおり、以下のメソッドは、ロードされたメディアへのデータとしてのアクセスと見なされます。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #004993;">flash.display</span>.<span style="color: #004993;">Loader</span>.<span style="color: #004993;">content</span>;
<span style="color: #004993;">flash.display</span>.<span style="color: #004993;">BitmapData</span>.<span style="color: #004993;">draw</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
<span style="color: #004993;">flash.media</span>.<span style="color: #004993;">SoundMixer</span>.<span style="color: #004993;">computeSpectrum</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
<span style="color: #004993;">flash.media</span>.<span style="color: #004993;">SoundMixer</span>.<span style="color: #004993;">stopAll</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
<span style="color: #004993;">flash.media</span>.<span style="color: #004993;">Sound</span>.<span style="color: #004993;">id3</span>;</pre></div></div>

<p>つまり、以下のようなシチュエーションが、ロードされたメディアへのデータとしてのアクセスとなります。</p>
<ul>
<li>ビットマップデータへのアクセス
<ul>
<li>ロードした画像を含むLoaderクラスのインスタンス変数contentにアクセス</li>
<li>ロードした画像をBitmapDataクラスのインスタンスメソッドdrawの引数に指定する</li>
</ul>
</li>
<li>サウンドデータへのアクセス
<ul>
<li>ロードした音源を再生中にSoundMixerクラスのインスタンスメソッドcomputeSpectrum()を呼び出す</li>
<li>ロードした音源を再生中にSoundMixerクラスのインスタンスメソッドstopAll()を呼び出す</li>
<li>ロードした音源を含むSoundクラスのインスタンス変数id3にアクセス</li>
</ul>
</li>
<li>ビデオデータへのアクセス
<ul>
<li>FLVファイルからロードしたビデオデータにBitmapDataクラスのインスタンスメソッドdrawの引数に指定する</li>
</ul>
</ul>
<h4>データのロード</h4>
<p>Flash Player セキュリティにあるとおり、以下のメソッドは、データのロードと見なされます。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #004993;">flash.net</span>.<span style="color: #004993;">URLLoader</span>.<span style="color: #004993;">load</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
<span style="color: #004993;">flash.net</span>.<span style="color: #004993;">URLStream</span>.<span style="color: #004993;">load</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;</pre></div></div>

<p>Loaderクラスのloadを使用したロードはコンテンツのロード操作と見なされるがURLLoaderのloadはコンテンツのロード操作と見なされずデータのロード操作と見なされる点に注意しましょう。</p>
<h3>crossdomain.xmlが必要となるケースは？</h3>
<ul>
<li>ロードされたメディアへのデータとしてのアクセス</li>
<li>データのロード</li>
</ul>
<p>において、外部リソースがswfファイルと他のドメインである場合、外部リソースの提供側で許可が必要となります。許可はcrossdomain.xmlを使って行うことになります。</p>
<p>なお他のドメインと見なされるのは以下のケースです。</p>
<ul>
<li>example.comとexample.orgは別(これは当たり前)</li>
<li>chat.example.comとgame.example.comは別(サブドメインが違う)</li>
<li>example.comが192.0.2.1というIPアドレスである場合、example.comと192.0.2.1は別と見なさます</li>
</ul>
<h3>全部許可最強説</h3>
<p>FLASHのオーサリング上では問題なかったのに、webサーバに上げたとたん外部リソースとの連携まわりが動かない！そんなとき、こんなcrossdomain.xmlを置きがちです。少なくとも以前の私はそうでした。全部許可が最強なんて言ってみたりして。</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #00bbdd;">&lt;!DOCTYPE cross-domain-policy SYSTEM &quot;http://www.adobe.com/xml/dtds/cross-domain-policy.dtd&quot;&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;cross-domain-policy<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;site-control</span> <span style="color: #000066;">permitted-cross-domain-policies</span>=<span style="color: #ff0000;">&quot;all&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;allow-access-from</span> <span style="color: #000066;">domain</span>=<span style="color: #ff0000;">&quot;*&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/cross-domain-policy<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>でも、これって場合によっては、セキュリティリスクを伴うのです。</p>
<p>また、良く分からずに、下記の記述をすることもあります。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #004993;">flash.system</span>.<span style="color: #004993;">Security</span>.<span style="color: #004993;">allowDomain</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;*&quot;</span><span style="color: #000000;">&#41;</span>;</pre></div></div>

<p>こちらも同様に、セキュリティリスクを伴うのです。今回はcrossdomain.xmlに焦点を当てるので、flash.system.Security.allowDomain()に関してはひとまず置いておきます。</p>
<h3>crossdomain.xmlの仕様</h3>
<p>crossdomain.xmlの仕様はadobeのドキュメントを読みましょう。とても詳しいです。</p>
<blockquote><p>クロスドメインポリシーファイルは、Webクライアント（Adobe Flash Playerなど）に、複数のドメイン間でのデータ処理に関する許可を付与することができる、XML形式の文書です。<br />
<cite><a href="http://www.adobe.com/jp/devnet/articles/crossdomain_policy_file_spec.html">アドビ デベロッパーセンター クロスドメインポリシーファイルの仕様 </a></cite>
</p></blockquote>
<p>デフォルトでは、サーバのルートディレクトにcrossdomain.xmlを探しに行きます。example.comドメインであればhttp://example.com/crossdomain.xmlとなります。このルートディレクトリに存在するポリシーファイルをマスターポリシーファイルと呼びます。</p>
<p>マスターポリシーファイル以外の例えば、http://example.com/other/crossdomain.xmlを読み込みたい場合は、以下のようになります。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #004993;">Security</span>.<span style="color: #004993;">loadPolicyFile</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;http://example.com/other/crossdomain.xml&quot;</span><span style="color: #000000;">&#41;</span>;</pre></div></div>

<p>このとき以下のような順番でポリシーファイルにアクセスします。</p>
<ol>
<li>http://example.com/crossdomain.xmlを読み込む</li>
<li>site-control要素のpermitted-cross-domain-policies属性を確認</li>
<li>allの場合は、http://example.com/other/crossdomain.xmlを読み込む。master-only, noneの場合は読み込まない。</li>
</ol>
<p>(permitted-cross-domain-policies属性がby-content-type, by-ftp-filenameのケースを省略してます)</p>
<p>よって、別のポリシーファイルにアクセスするように指定しても、Flash Playerは必ずマスターポリシーファイルへアクセスすることに注意しましょう。</p>
<h3>ロードされたメディアへのデータとしてのアクセスを許可する</h3>
<p>ロードされたメディアへのデータとしてのアクセスでは、外部リソースがswfファイルと別ドメインにある場合、crossdomain.xmlの読み込みが必須となります。以下に例を示します。</p>
<h4>flash.display.Loaderでload後にBitmapData操作したい</h4>
<p>Loaderクラスをのloadメソッドを実行する際に、LoaderContextを指定します。LoaderContexインスタンスを作成する際には引数にtrueを与えます。こうすることでLoaderがloadメソッドを実行する際にポリシーファイルを参照するようになります。</p>

<div class="wp_syntax"><div class="code"><pre class="actionscript3" style="font-family:monospace;"><span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">loader</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">Loader</span> = <span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">Loader</span><span style="color: #000000;">&#40;</span><span style="color: #000000;">&#41;</span>;
<span style="color: #6699cc; font-weight: bold;">var</span> loaderContext<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">LoaderContext</span> = <span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">LoaderContext</span><span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">true</span><span style="color: #000000;">&#41;</span>;
&nbsp;
<span style="color: #004993;">loader</span>.<span style="color: #004993;">load</span><span style="color: #000000;">&#40;</span><span style="color: #0033ff; font-weight: bold;">new</span> <span style="color: #004993;">URLRequest</span><span style="color: #000000;">&#40;</span><span style="color: #990000;">&quot;http://external.example.com/image.jpg&quot;</span><span style="color: #000000;">&#41;</span>, loaderContext<span style="color: #000000;">&#41;</span>;
<span style="color: #004993;">loader</span>.<span style="color: #004993;">contentLoaderInfo</span>.<span style="color: #004993;">addEventListener</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">Event</span>.<span style="color: #004993;">COMPLETE</span>, <span style="color: #339966; font-weight: bold;">function</span><span style="color: #000000;">&#40;</span>event<span style="color: #000000;">&#41;</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #0033ff; font-weight: bold;">void</span>
<span style="color: #000000;">&#123;</span>
    <span style="color: #6699cc; font-weight: bold;">var</span> <span style="color: #004993;">bitmapData</span><span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">BitmapData</span> = <span style="color: #004993;">BitmapData</span><span style="color: #000000;">&#40;</span><span style="color: #000000; font-weight:bold;">100</span>, <span style="color: #000000; font-weight:bold;">100</span>, <span style="color: #0033ff; font-weight: bold;">true</span>, 0x000000<span style="color: #000000;">&#41;</span>;
    <span style="color: #004993;">bitmapData</span>.<span style="color: #004993;">draw</span><span style="color: #000000;">&#40;</span><span style="color: #004993;">loader</span><span style="color: #000000;">&#41;</span>; <span style="color: #009900;">// drawの引数にする</span>
&nbsp;
    <span style="color: #6699cc; font-weight: bold;">var</span> bitmapData2<span style="color: #000000; font-weight: bold;">:</span><span style="color: #004993;">BitmapData</span> = <span style="color: #004993;">loader</span>.<span style="color: #004993;">content</span>; <span style="color: #009900;">// Loaderインスタンスのcontentプロパティにアクセスする</span>
<span style="color: #000000;">&#125;</span><span style="color: #000000;">&#41;</span>;</pre></div></div>

<p>このとき、swfファイルがswf.example.comというドメインにあったとすると、http://external.example.com/crossdomain.xmlでは以下のように記述します。</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #00bbdd;">&lt;!DOCTYPE cross-domain-policy SYSTEM &quot;http://www.adobe.com/xml/dtds/cross-domain-policy.dtd&quot;&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;cross-domain-policy<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;site-control</span> <span style="color: #000066;">permitted-cross-domain-policies</span>=<span style="color: #ff0000;">&quot;all&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;allow-access-from</span> <span style="color: #000066;">domain</span>=<span style="color: #ff0000;">&quot;swf.example.com&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/cross-domain-policy<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<h3>データのロード時のcrossdomain.xml確認フロー</h3>
<p>データのロードでは、外部リソースがswfファイルと別ドメインにある場合、crossdomain.xmlの読み込みが必須となります。その際のフローを確認して見ます。</p>
<h4>swfからアクセスした別のdomainのAPIにアクセスする場合</h4>
<p>swfファイルがswf.example.comにありapi.example.comのAPIを叩く例です。具体的には、URLLoaderクラスのloadメソッドを使って、外部リソースであるapi.example.comのAPIから情報を取得するようなケースです。</p>
<p>フローを以下に示します。</p>
<div id="attachment_116" class="wp-caption aligncenter" style="width: 630px"><img src="http://fla.la/wp-content/uploads/2009/08/crossdomain_001_001.png" alt="外部データが別ドメインにある場合のcrossdomain.xml" title="crossdomain_001_001" width="620" height="460" class="size-full wp-image-116" /><p class="wp-caption-text">外部データが別ドメインにある場合のcrossdomain.xml</p></div>
<ol>
<li>swf.example.comのswfをリクエスト</li>
<li>swfを受け取る</li>
<li>api.example.comのcrossdomain.xmlを取得</li>
<li>crossdomain.xmlでswf.example.comが許可されているか確認</li>
<li>api.example.comのAPIをリクエスト</li>
<li>APIは結果を返す</li>
</ol>
<p>このケースで必要なcrossdomain.xmlは、http://api.example.com/crossdonain.xmlとなります。内容を以下に示します。</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #00bbdd;">&lt;!DOCTYPE cross-domain-policy SYSTEM &quot;http://www.adobe.com/xml/dtds/cross-domain-policy.dtd&quot;&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;cross-domain-policy<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;site-control</span> <span style="color: #000066;">permitted-cross-domain-policies</span>=<span style="color: #ff0000;">&quot;master-only&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;allow-access-from</span> <span style="color: #000066;">domain</span>=<span style="color: #ff0000;">&quot;swf.example.com&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/cross-domain-policy<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>ポイントは外部リソースにアクセスする際にポリシーファイルの許可があれば、ブラウザはcookieも送信する点です。例えばこのケースでcrossdomain.xmlが以下のようである場合</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #00bbdd;">&lt;!DOCTYPE cross-domain-policy SYSTEM &quot;http://www.adobe.com/xml/dtds/cross-domain-policy.dtd&quot;&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;cross-domain-policy<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;site-control</span> <span style="color: #000066;">permitted-cross-domain-policies</span>=<span style="color: #ff0000;">&quot;master-only&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;allow-access-from</span> <span style="color: #000066;">domain</span>=<span style="color: #ff0000;">&quot;*&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/cross-domain-policy<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>まったく別のドメインhoge.example.orgにおいてあるswfファイルからもapi.example.comにアクセスする際、ブラウザはcookieを送信します。よって、cookieが必要なサイトの内容がhoge.example.orgにおいてあるswfファイルから見えることになりますので注意しましょう。</p>
<h4>swfからアクセスしたAPIがリダイレクトされる場合</h4>
<p>swfファイルがswf.example.comにありapi.example.comのAPIを叩く例です。先ほどとの違いは、api.exampl.comのAPIはレスポンスとして、example.comへのリダイレクトを返すところです。</p>
<p>フローを以下に示します。</p>
<div id="attachment_117" class="wp-caption aligncenter" style="width: 629px"><img src="http://fla.la/wp-content/uploads/2009/08/crossdomain_001_002.png" alt="外部データが別ドメインにありリダイレクトされる場合のcrossdomain.xml" title="crossdomain_001_002" width="619" height="740" class="size-full wp-image-117" /><p class="wp-caption-text">外部データが別ドメインにありリダイレクトされる場合のcrossdomain.xml</p></div>
<ol>
<li>swf.example.comのswfをリクエスト</li>
<li>swfを受け取る</li>
<li>api.example.comのcrossdomain.xmlを取得</li>
<li>crossdomain.xmlでswf.example.comが許可されているか確認</li>
<li>api.example.comのAPIをリクエスト</li>
<li>APIはリダイレクトを返す</li>
<li>api.example.netのcrossdomain.xmlを取得</li>
<li>crossdomain.xmlでswf.example.comが許可されているか確認</li>
<li>api.example.net(リダイレクト先)のAPIをリクエスト</li>
<li>APIは結果を返す</li>
</ol>
<p>このケースで必要なcrossdomain.xmlは、http://api.example.com/crossdonain.xmlとhttp://api.example.net/crossdonain.xmlとなります。内容を以下に示します。</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span><span style="color: #000000; font-weight: bold;">?&gt;</span></span>
<span style="color: #00bbdd;">&lt;!DOCTYPE cross-domain-policy SYSTEM &quot;http://www.adobe.com/xml/dtds/cross-domain-policy.dtd&quot;&gt;</span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;cross-domain-policy<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;site-control</span> <span style="color: #000066;">permitted-cross-domain-policies</span>=<span style="color: #ff0000;">&quot;master-only&quot;</span><span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;allow-access-from</span> <span style="color: #000066;">domain</span>=<span style="color: #ff0000;">&quot;swf.example.com&quot;</span> <span style="color: #000000; font-weight: bold;">/&gt;</span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/cross-domain-policy<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<h3>まとめ</h3>
<p>外部リソースを扱う際には、crossdomain.xmlを設置することになると思いますが、必要な箇所で必要な設定を心がけることが大事です。外部ドメインにある画像の表示だけであれば、crossdomain.xmlは必要でなくflash.display.Loaderクラスのloadメソッドを使う等、代替案も考えることをおすすめします。</p>
]]></content:encoded>
			<wfw:commentRss>http://fla.la/archives/64/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
