サンプルアプリケーションとセキュリティ上の影響

Adobe AIR 1.0 およびそれ以降

次の HTML コードでは、ファイルシステム API を使用して、ユーザーのデスクトップディレクトリ内のファイルとディレクトリを一覧表示します。

アプリケーションの HTML コードを次に示します。

<html> 
    <head> 
        <title>Sample application</title> 
        <script type="text/javascript" src="AIRAliases.js"></script> 
        <script> 
            function getDesktopFileList() 
            { 
                var log = document.getElementById("log"); 
                var files = air.File.desktopDirectory.getDirectoryListing(); 
                for (i = 0; i < files.length; i++) 
                { 
                    log.innerHTML += files[i].name + "<br/>"; 
                } 
            } 
        </script> 
    </head>     
    <body onload="getDesktopFileList();" style="padding: 10px"> 
        <h2>Files and folders on the desktop:</h2>             
        <div id="log" style="width: 450px; height: 200px; overflow-y: scroll;" /> 
    </body> 
</html>

また、アプリケーション記述ファイルを設定し、AIR Debug Launcher(ADL)アプリケーションを使用してアプリケーションをテストする必要もあります

サンプルコードの大部分を Web ブラウザーで使用することができます。ただし、コードの一部はランタイム固有です。

getDesktopFileList() メソッドでは、ランタイム API で定義されている File クラスを使用しています。アプリケーションの最初の script タグで、AIR API へのアクセスを容易にする AIRAliases.js ファイル(AIR SDK が提供)が読み込まれます(例えば、サンプルコードでは、シンタックス air.File で AIR File クラスにアクセスしています)。詳しくは、 AIRAliases.js ファイルの使用 を参照してください。

File.desktopDirectory プロパティは、File オブジェクト(ランタイムによって定義されるオブジェクトの型)です。File オブジェクトは、ユーザーのコンピューター上のファイルまたはディレクトリへの参照です。 File.desktopDirectory プロパティは、ユーザーのデスクトップディレクトリへの参照です。 getDirectoryListing() メソッドは、File オブジェクトに対して定義され、File オブジェクトの配列を返します。 File.desktopDirectory.getDirectoryListing() メソッドは、ユーザーのデスクトップ上のファイルとディレクトリを表す File オブジェクトの配列を返します。

各 File オブジェクトには、ファイル名のストリングを持つ name プロパティがあります。 getDesktopFileList() メソッドの for ループは、ユーザーのデスクトップのディレクトリ上のファイルとディレクトリの処理を繰り返し行い、アプリケーションの div オブジェクトの innerHTML プロパティにファイル名とディレクトリ名を付加していきます。

AIR アプリケーションでの HTML 使用時の重要なセキュリティ規則

AIR アプリケーションと共にインストールするファイルから、AIR API にアクセスできます。セキュリティ上の理由で、他のソースのコンテンツからはアクセスできません。例えば、この制限により、リモートドメイン(http://example.com など)のコンテンツからユーザーのデスクトップディレクトリを読み込むこと(またはさらに悪い状況)はできません。

eval() 関数(および関連する API)を呼び出すことによって攻撃される可能性があるセキュリティの抜け穴があるので、アプリケーションと共にインストールされるコンテンツは、これらのメソッドの使用がデフォルトで制限されています。しかし、一部の Ajax フレームワークは、 eval() 関数および関連する API の呼び出しを使用します。

AIR アプリケーションで動作するコンテンツを適切に構成するには、異なるソースのコンテンツに対するセキュリティ制限の規則を考慮する必要があります。異なるソースのコンテンツは、サンドボックスと呼ばれる個別のセキュリティ区分に配置されます( セキュリティサンドボックス を参照)。デフォルトで、アプリケーションと共にインストールされるコンテンツは、 アプリケーション サンドボックスというサンドボックスにインストールされ、AIR API へのアクセス権が付与されます。アプリケーションサンドボックスは、信頼できないコードの実行を防止するよう設計された制限があり、一般に最も安全性の高いサンドボックスです。

ランタイムでは、アプリケーションと共にインストールされたコンテンツをアプリケーションサンドボックス以外のサンドボックスに読み込むことができます。非アプリケーションサンドボックス内のコンテンツは、一般的な Web ブラウザーのコンテンツと同様のセキュリティ環境で動作します。例えば、非アプリケーションサンドボックス内のコードは、 eval() メソッドおよび関連するメソッドを使用できます(ただし、同時に AIR API にアクセスすることはできません)。ランタイムには、(AIR API を例えば非アプリケーションコンテンツに公開せずに)異なるサンドボックス内のコンテンツが安全に通信できる方法が備えられています。詳しくは、 異なるセキュリティサンドボックス内のコンテンツのクロススクリプト を参照してください。

サンドボックスで使用が制限されているコードを呼び出すと、セキュリティ上の理由から、ランタイムは JavaScript エラー「Adobe AIR security violation for JavaScript code in the application security sandbox.」を送出します。

このエラーを回避するには、次節、 セキュリティ関連の JavaScript エラーの回避 で説明するコーディングの手法を参照してください。

詳しくは、 Adobe AIR の HTML セキュリティ を参照してください。