データのロード

Flash Player 9 以降、Adobe AIR 1.0 以降

Flash Player および AIR コンテンツは、サーバーとデータをやり取りできます。データのロードはメディアのロードとは異なる種類の操作です。なぜなら、ロードされた情報は、メディアとして表示されず、プログラムオブジェクトとして表示されるからです。一般に、コンテンツは、コンテンツ自体のドメインからデータをロードします。ただし、別のドメインからのデータをロードする場合、通常はポリシーファイルが必要です。 Web サイトのコントロール(ポリシーファイル) を参照してください。

注意: AIR アプリケーションサンドボックス内で実行中のコンテンツがリモートドメインから提供されることはありません(開発者が意図的にリモートコンテンツをアプリケーションサンドボックスに読み込む場合を除く)。したがって、ポリシーファイルによって防御されている攻撃にさらされる可能性はありません。アプリケーションサンドボックス内の AIR コンテンツがデータをロードする場合、ポリシーファイルによる制限を受けません。ただし、他のサンドボックス内にある AIR コンテンツは、ここで説明している制限を受けます。

URLLoader と URLStream の使用

データは、XML ファイルまたはテキストファイルとしてロードできます。 URLLoader クラスと URLStream クラスの load() メソッドは、URL ポリシーファイルの許可により制御されます。

load() メソッドを使用して、このメソッドを呼び出しているコードのドメイン以外のドメインからコンテンツをロードする場合、ランタイムはロードされるアセットのサーバー上に URL ポリシーファイルがあるかどうかをチェックします。ポリシーファイルが存在し、ロードするコンテンツのドメインへのアクセスが許可されている場合は、データをロードできます。

ソケットへの接続

デフォルトでは、ランタイムはポート 843 から提供されるソケットポリシーファイルを検索します。URL ポリシーファイルと同様に、このファイルは マスターポリシーファイル と呼ばれます。

ポリシーファイルが最初に Flash Player 6 に導入されたとき、ソケットポリシーファイルのサポートはありませんでした。 ソケットサーバーへの接続は、ソケットサーバーと同じホストのポート 80 上にある HTTP サーバーのデフォルトの場所に置かれているポリシーファイルによって承認されていました。Flash Player 9 では、この機能が引き続きサポートされていますが、Flash Player 10 ではサポートされていません。Flash Player 10 では、ソケットポリシーファイルだけがソケット接続を承認できます。

URL ポリシーファイルと同様に、ソケットポリシーファイルは、ポリシーファイルを提供するポートを指定するメタポリシーステートメントをサポートします。しかし、ソケットポリシーファイルのデフォルトメタポリシーは、「マスターのみ」ではなく「すべて」です。したがって、マスターポリシーファイルで高度な制限が設定されている場合を除き、Flash Player では、ホスト上の任意のソケットがソケットポリシーファイルを提供できるものと見なされます。

接続先のソケットが SWF ファイルと同じドメインにある場合でも、ソケットへのアクセスおよび XML ソケット接続は、デフォルトで無効です。次の場所のいずれかからソケットポリシーファイルを提供して、ソケットレベルのアクセスを許可できます。

  • ポート 843(マスターポリシーファイルの場所)

  • メインソケット接続と同じポート

  • メインソケット接続以外のポート

デフォルトでは、Flash Player はポート 843 およびメインソケット接続と同じポートでソケットポリシーファイルを検索します。別のポートからソケットポリシーファイルを提供する場合、SWF ファイルは、 Security.loadPolicyFile() を呼び出す必要があります。

ソケットポリシーファイルのシンタックスは URL ポリシーファイルと同じですが、アクセスを許可するポートも指定する必要がある点が異なります。ソケットポリシーファイルが 1024 未満のポート番号から提供される場合、任意のポートへのアクセスが許可されます。ポリシーファイルがポート 1024 以上のポートから提供される場合、1024 以上のポートへのアクセスのみが許可されます。許可するポートは、 <allow-access-from> タグの to-ports 属性で指定します。指定できる値は、単一のポート番号、ポート範囲、およびワイルドカードです。

次に、ソケットポリシーファイルの例を示します。

<?xml version="1.0"?> 
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd"> 
<!-- Policy file for xmlsocket://socks.mysite.com --> 
<cross-domain-policy>  
    <allow-access-from domain="*" to-ports="507" />  
    <allow-access-from domain="*.example.com" to-ports="507,516" />  
    <allow-access-from domain="*.example.org" to-ports="516-523" />  
    <allow-access-from domain="adobe.com" to-ports="507,516-523" />  
    <allow-access-from domain="192.0.34.166" to-ports="*" />  
</cross-domain-policy> 

ポート 843 またはメインソケット接続と同じポートからソケットポリシーファイルを取得するには、 Socket.connect() または XMLSocket.connect() メソッドを呼び出します。Flash Player は、最初にポート 843 上のマスターポリシーファイルをチェックします。マスターポリシーファイルが見つかった場合、Flash Player は、ターゲットポート上のソケットポリシーファイルを禁止するメタポリシーステートメントがファイルに含まれているかどうかをチェックします。アクセスが禁止されていない場合、マスターポリシーファイル内の適切な allow-access-from ステートメントが最初に検索されます。適切なステートメントが見つからない場合、メインソケット接続と同じポート上でソケットポリシーファイルが検索されます。

別の場所からソケットポリシーファイルを取得するには、次に示すように、最初に特別な「 xmlsocket 」シンタックスで Security.loadPolicyFile() メソッドを呼び出します。

Security.loadPolicyFile("xmlsocket://server.com:2525"); 

Socket.connect() または XMLSocket.connect() メソッドを呼び出す前に Security.loadPolicyFile() メソッドを呼び出します。その場合、Flash Player は、ユーザーのメイン接続を許可するかどうかを決める前に、ユーザーのポリシーファイル要求が満たされるのを待ちます。 しかし、ターゲットの場所でポリシーファイルを提供できないことがマスターポリシーファイルで指定されている場合は、その場所にポリシーファイルが存在していても loadPolicyFile() への呼び出しは無効です。

ソケットサーバーを実装し、ソケットポリシーファイルを提供する必要がある場合は、ポリシーファイルを提供するのに、メイン接続を受け入れるのと同じポートを使用するか、別のポートを使用するかを決めてください。いずれの場合も、サーバーは、クライアントからの最初の送信を待ってから応答を送信する必要があります。

Flash Player は、ポリシーファイルを要求する場合、接続が確立されると同時に、必ず次のストリングを送信します。

<policy-file-request/>

サーバーはこのストリングを受信すると、ポリシーファイルを送信できます。 Flash Player からの要求は、常に null バイトによって終了し、サーバーからの応答も null バイトで終了する必要があります。

同じ接続をポリシーファイル要求とメイン接続の両方に再使用しないでください。ポリシーファイルの送信後は、接続を閉じてください。そのようにしなかった場合、Flash Player はポリシーファイル接続を閉じてから、再接続してメイン接続を設定します。

データの保護

インターネット上に配信されるデータを漏えいや改ざんから保護するために、データの送信元のサーバーで、トランスポート層セキュリティ(TLS)またはセキュアソケットレイヤー(SSL)を使用できます。これで、HTTPS プロトコルを使用してサーバーに接続できます。

AIR 2 以降向けに作成されたアプリケーションでは、TCP ソケット通信を保護することもできます。SecureSocket クラスを使用すると、TLS バージョン 1 または SSL バージョン 4 を使用するソケットサーバーに対するソケット通信を開始できます。

データの送信

データ送信は、コードによりサーバーまたはリソースにデータが送信されるときに発生します。ネットワークドメインのコンテンツでは、常にデータの送信を実行できます。ローカル SWF ファイルは、その SWF ファイルが local-trusted サンドボックス、local-with-networking サンドボックスまたは AIR アプリケーションサンドボックスに入っている場合にのみ、ネットワークアドレスにデータを送信できます。詳しくは、 ローカルサンドボックス を参照してください。

flash.net.sendToURL() 関数を使用すると、URL にデータを送信できます。それ以外のメソッドも、URL に要求を送信します。 これらのメソッドには、 Loader.load() Sound.load() などのロードメソッドと URLLoader.load() URLStream.load() などのデータロードメソッドがあります。

ファイルのアップロードとダウンロード

FileReference.upload() メソッドは、ユーザーによって選択されたファイルのリモートサーバーへのアップロードを開始します。 FileReference.upload() メソッドを呼び出す前に、 FileReference.browse() メソッドまたは FileReferenceList.browse() メソッドを呼び出す必要があります。

FileReference.browse() メソッドまたは FileReferenceList.browse() メソッドを開始するコードは、マウスイベントまたはキーボードイベントへの応答としてのみ呼び出すことができます。別の状況で呼び出された場合、Flash Player は例外をスローします。ただし、AIR アプリケーションサンドボックスからこれらのメソッドを呼び出す場合、ユーザーイベントは必要ありません。

FileReference.download() メソッドを呼び出すと、ユーザーがリモートサーバーからファイルをダウンロードできるダイアログボックスが開きます。

注意: サーバーでユーザー認証が必要な場合、ブラウザー内で実行される、つまり、ブラウザープラグインまたは ActiveX コントロールを使用する SWF ファイルでのみ、認証用のユーザー名とパスワードをユーザーが入力できるダイアログボックスを表示できます。ただし、それはダウンロードの場合のみです。Flash Player では、ユーザー認証が必要なサーバーへのアップロードはできません。

呼び出しを行う SWF ファイルが local-with-filesystem サンドボックス内にある場合、アップロードとダウンロードは許可されません。

デフォルトでは、SWF ファイルは、それ自体のサーバー以外のサーバーとの間でアップロードまたはダウンロードを行うことはできません。 SWF ファイルは、別のサーバーへのアップロードまたはダウンロードが可能ですが、そのサーバーに、呼び出し側 SWF ファイルのドメインに許可を付与するポリシーファイルが格納されている必要があります。