アクセシビリティ
デベロッパーリソース

目次

より安全なSWF Webアプリケーションの作成

HTMLコード内でのセキュリティ制御の設定

SWFをHTMLに埋め込む場合、ブラウザからまたはネットワーク上でコンテンツにアクセスするためにSWFファイルが持つアクセス許可をFlash Playerに通知するフラグを設定できます。これらのフラグは、サイトでサードパーティ開発者の信頼性のないSWFファイルをホストする場合に役立ちます。

以下に説明する方法以外の追加情報については、「How to restrict SWF content from HTML*」のブログ投稿を参照してください。

allowScriptAccessの使用

関連する脅威:ブラウザへのスクリプトのインジェクション

HTMLスクリプトへのアクセス制御について詳しくは、Adobe LiveDocsの「ホストWebページのスクリプトへのアクセス制御」を参照してください。

allowScriptAccess設定は、Flash Player 6.0.40.0以降で使用できるようになりました。この設定により、親SWFファイルおよび親SWFファイルによってロードされたSWFファイルが、FSCommandExternalInterfaceなどのコマンドを使用するか、「javascript://{code}」ステートメントをgetURL(ActionScript 2.0の場合)およびnavigateToURL(ActionScript 3.0の場合)に送信することによって、ブラウザに対して外部スクリプト呼び出しを行うことができるかどうかが決まります。

SWFファイルへのアクセスを許可する場合、基本的にHTMLページ全体への読み取りアクセスと書き込みアクセスの両方を許可することになるという点に注意してください。

allowScriptAccessでは、次の3種類の設定が可能です。

  • always:SWFファイルをロードする際に使用するドメインに関係なく、ブラウザと通信するときにSWFファイルは完全に信頼されます。このSWFによってロードされたすべてのSWFファイルにも、ブラウザと通信する許可が与えられます。これは、Flash Player 7以前との互換性を確保するようにコンパイルされたSWFファイルのデフォルトです。
  • sameDomain:SWFとホストするHTMLページが同じドメインに含まれている場合、これらは相互に通信できます。これは、Flash Player 8以降との互換性を確保するようにコンパイルされたSWFファイルのデフォルトです。
  • never:SWFとブラウザがJavaScriptを使用して相互に通信することは一切許可されません。

allowNetworkingタグは、ブラウザ内でのスクリプトアクセスに影響する場合があり、allowScriptAccessタグで使用されている設定より優先されることに注意することも重要です。

次のコード例の強調表示されているセクションを確認してください。

<object id='MyMovie.swf' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.adobe.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0' height='100%' width='100%'>
<param name='allowScriptAccess' value='never'/>
<param name='src' value=''MyMovie.swf'/>
<embed name='MyMovie.swf' pluginspage='/go/getflashplayer' src='MyMovie.swf' height='100%' width='100%' allowScriptAccess='never'/>
</object>

allowNetworkingについて

関連する脅威:ブラウザへのスクリプトのインジェクション、クロスドメイン権限の昇格

以下で説明する内容について詳しくは、Adobe LiveDocsの「ネットワークAPIの制限」を参照してください。

allowNetworking機能は、ブラウザまたはActionScriptのネットワーク呼び出しを通じて、SWFが外部ネットワーク呼び出しを行うことを防ぐためにFlash Player 9で追加されました。allowScriptAccessタグによって制御されるメソッドはクラス全体のActionScriptネットワークメソッドのサブセットなので、allowNetworking設定はallowScriptAccess設定よりも優先されることになります。

allowNetworkingでは、次の3種類の設定が可能です。

  • all:ネットワーク接続を行うときに、SWFは完全に信頼されます。ブラウザとの通信は、allowScriptAccessによって制御されます。これがデフォルト設定です。
  • internal:SWFは、navigateToURL()fscommand()およびExternalInterface.call()の各ActionScript 3.0コマンドを作成できなくなります。ActionScript 2.0の開発者の場合、getURL()MovieClip.getURL()fscommand()およびExternalInterface.call()が制限されます。この設定によりallowScriptAccess設定が無効になり、SWFとブラウザとの通信がブロックされます。すべてのネットワーク呼び出しは、SWF内で内部的に行う必要があります。
  • none:これは、HTML内で設定できるタグの中で最も制限が厳しいタグです。このタグを指定すると、SWFによるすべての外部通信がブロックされます。

ActionScript 3.0の場合、内部設定によってブロックされるネットワークメソッドだけでなく、sendToURL()FileReference.download()FileReference.upload()Loader.loadLocalConnection.connect()NetConnection.connect()NetStream.play()Security.loadPolicyFile()SharedObject.getLocal()SharedObject.getRemote()Socket.connectSound.load()URLLoader.load()URLStream.load()XMLSocket.connect()System.security.loadPolicyFile()の各ネットワークメソッドもブロックされます。

ActionScript 2.0の場合、内部設定によってブロックされるネットワークメソッドだけでなく、XML.load()XML.send()XML.sendAndLoad()LoadVars.load()LoadVars.send()LoadVars.sendAndLoad()loadVariables()loadVariablesNum()MovieClip.loadVariables()NetConnection.connect()NetStream.play()loadMovie()loadMovieNum()MovieClip.loadMovie()MovieClipLoader.loadClip()Sound.loadSound()LocalConnection.connect()LocalConnection.send()SharedObject.getLocal()SharedObject.getRemote()FileReference.upload()FileReference.download()System.security.loadPolicyFile()XMLSocket.connect()の各ネットワークメソッドもブロックされます。

また、TextFieldオブジェクトのhtmlTextプロパティの<img>タグ内で外部メディアを参照することはできません(SecurityError例外がスローされます)。(ActionScriptではなく)Flashオーサリングツールで追加されたインポート済み共有ライブラリのシンボルは、実行時にブロックされます。

次のコード例の強調表示されているセクションを確認してください。

<object id='MyMovie.swf' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.adobe.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0' height='100%' width='100%'>
<param name='allowNetworking' value='none'/>
<param name='src' value=''MyMovie.swf'/>
<embed name='MyMovie.swf' pluginspage='/go/getflashplayer' src='MyMovie.swf' height='100%' width='100%' allowNetworking='none'/>
</object>

allowScriptAcessのメソッドより優先されるallowNetworking

表1.に、allowNetworkingフラグとallowScriptAccessフラグの組み合わせの結果を示します。

表1.さまざまなセキュリティレベルのネットワーク設定とアクセス設定

allow
ScriptAccess
allowNetworking
 

all

internal

none

always

SWFは、ブラウザおよびネットワークと通信するためのフルアクセス権を持ちます。これが最も安全性の低い設定です。

allowNetworking設定により、allowScriptAccess設定は無効になり、ブラウザへのアクセスが禁止されます。SWFは、ソケットやローダーなどの内部APIを利用してネットワークと通信できます。

allowNetworking設定により、allowScriptAccess設定は無効になり、SWFはブラウザおよびネットワークと通信できなくなります。

sameDomain

SWFとHTMLが同じドメインに含まれている場合、SWFはHTMLコンテナとやり取りできます。すべての内部ネットワークAPIを使用できます。

allowNetworking設定により、allowScriptAccess設定は無効になり、ブラウザへのアクセスが禁止されます。SWFは、ソケットやローダーなどの内部APIを利用してネットワークと通信できます。

allowNetworking設定により、allowScriptAccess設定は無効になり、SWFはブラウザおよびネットワークと通信できなくなります。

never

SWFはブラウザの呼び出しを行うことはできませんが、ソケットやローダーなどの内部APIを使用してネットワーク呼び出しを行うことができます。

このSWFはブラウザと通信できません。SWFは、ソケットやローダーなどの内部APIを利用してネットワークと通信できます。

allowNetworking設定により、SWFはブラウザおよびネットワークと通信できなくなります。これが最も安全性の高い設定です。

フルスクリーンモードの制御

関連する脅威:スプーフィング

フルスクリーンモードでの動作について詳しくは、デベロッパーセンターの記事「Flash Player 9のフルスクリーンモードの説明」を参照してください。

Flash Playerに用意された機能を使用して、フルスクリーンモードの表示を制御できます。サードパーティのSWFファイルをホストするWebサイトでは、フルスクリーンモードに切り替え、サイトのコンテンツをオーバーレイすることをビデオに許可することは望ましくない場合があります。基本的に、フルスクリーン表示を使用すると、エンドユーザは実際にはサードパーティのSWFファイルとやり取りしているにもかかわらず、ホストしているWebサイトとやり取りしていると信じ込まされる可能性があります。デフォルトでは、allowFullScreenオプションはfalseに設定されています。

アドビでは、このシナリオを制限する他の制御を用意しました。ユーザは、マウスクリックまたはキー入力によってフルスクリーンモードを開始する必要があります。フルスクリーン表示を起動すると、SWFをフルスクリーンモードで表示することをエンドユーザに警告するオーバーレイダイアログボックスが表示されます。このダイアログボックスでは、フルスクリーンモードの終了方法も示されます。SWFがフルスクリーンモードで表示されている間、ユーザはテキスト入力フィールドにデータを入力することはできません。ユーザと管理者は、mms.cfgファイルでフルスクリーンモードを禁止することもできます。

次のコード例の強調表示されているセクションを確認してください。

<object id='MyMovie.swf' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.adobe.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0' height='100%' width='100%'>
<param name='allowFullScreen' value='false'/>
<param name='src' value=''MyMovie.swf'/>
<embed name='MyMovie.swf' pluginspage='/go/getflashplayer' src='MyMovie.swf' height='100%' width='100%' AllowFullScreen='false'/>
</object>