サンドボックスセキュリティの使用

サンドボックスセキュリティ (スタンダード版ではリソースセキュリティ) は、ColdFusion ページの場所を使用して ColdFusion リソースへのアクセスを制御します。"サンドボックス" とは、セキュリティ制限の適用対象となるサイト内の所定のディレクトリです。サンドボックスセキュリティを使用すると、特定のディレクトリとその下位ディレクトリにある ColdFusion ページについて、どのタグ、関数、およびリソース (ファイル、ディレクトリ、データソースなど) を使用できるかを指定できます。

サンドボックスセキュリティを J2EE 設定で使用するには、そのアプリケーションサーバーでセキュリティマネージャー(java.lang.SecurityManager)が実行されている必要があり、次の JVM 引数を定義する必要があります(Tomcat の場合、この引数は cf_root/cfusion/bin/jvm.config ファイルの java.args 行で定義します)。

-Djava.security.manager "-Djava.security.policy=cf_root/WEB-INF/cfusion/lib/coldfusion.policy" "-Djava.security.auth.policy=cf_root/WEB-INF/cfusion/lib/neo_jaas.policy" 
注意: デフォルトでは、サンドボックスセキュリティは有効になっていません。[セキュリティ]-[サンドボックスセキュリティ] ページで有効化するまで、サンドボックスセキュリティの設定は ColdFusion に適用されません。

複数のサンドボックスの使用 (エンタープライズ版のみ)

デフォルトで、サンドボックスのサブディレクトリは、1 レベル上のディレクトリの設定を継承します。ただし、サブディレクトリのサンドボックスを定義した場合には、サブディレクトリは親の設定を継承しなくなり、親のディレクトリのサンドボックス設定は完全に上書きされます。たとえば、次のディレクトリの例を考えてみます。

C:\Inetpub\wwwroot 
C:\Inetpub\wwwroot\sales 
C:\Inetpub\wwwroot\rnd 
C:\Inetpub\wwwroot\rnd\dev 
C:\Inetpub\wwwroot\rnd\'a

wwwroot ディレクトリにサンドボックスを定義した場合には、その設定が sales ディレクトリと rnd ディレクトリにも適用されます。rnd ディレクトリのサンドボックスも定義した場合は、rnd のサンドボックス設定が dev および qa ディレクトリにも適用されます。wwwroot および sales ディレクトリでは元の設定が保持され、rnd ディレクトリとそのサブディレクトリでは wwwroot ディレクトリの設定よりも rnd の設定のほうが優先されます。

この階層形式のセキュリティにより、異なるセキュリティレベルのユーザーへのパーソナライズされたサンドボックスの設定が可能です。たとえば、ColdFusion の共有サーバー上で複数のクライアントにホスティングしている Web ホスティング管理者の場合は、各顧客に対してサンドボックスを設定することができます。これによって顧客が別の顧客のデータソースやファイルにアクセスするのを制限できます。

制限できるリソース

制限できるのは、次のリソースです。

データソース
ColdFusion データソースの使用を制限します。

CF タグ
ファイル、レジストリ、LDAP (Lightweight Directory Access Protocol)、メール、ログなど、サーバー (または外部サーバー) のリソースを操作する ColdFusion タグの使用を制限します。

CF 関数
ファイルシステムにアクセスする ColdFusion 関数の使用を制限します。

ファイル / ディレクトリ
サンドボックス内のタグおよび関数が、サンドボックスの外側のファイルおよびディレクトリにアクセスできるようにします。
注意: サンドボックスセキュリティを有効にした状態で Administrator API を使用するには、"<ColdFusion の Web ルートディレクトリ>/CFIDE/adminapi" ディレクトリへのアクセスを許可します。

サーバー / ポート
サードパーティリソースを呼び出す ColdFusion タグが使用できるサーバー、ポート、およびポート範囲を指定します。

詳しくは、Administrator のオンラインヘルプを参照してください。

注意: ColdFusion を IBM WebSphere 上の J2EE 設定で実行する場合、[ファイル / ディレクトリ] タブおよび [サーバー / ポート] タブは有効になりません。

ディレクトリとアクセス許可について

サンドボックスの外側にあるファイルへのアクセスを有効にするときは、ファイル名を指定します。サンドボックスの外側にあるディレクトリへのアクセスを有効にするときは、<ディレクトリ名>¥<インジケータ> を指定します。この <インジケータ> には、次のようにダッシュ (-) またはアスタリスク (*) を指定します。

  • 円記号の後ろにダッシュを付けると (¥-)、タグおよび関数は指定したディレクトリ内のすべてのファイルにアクセスできる他、再帰的にサブディレクトリ内のすべてのファイルにもアクセスできます。

  • 円記号の後ろにアスタリスクを付けると (¥*)、タグおよび関数は指定したディレクトリ内のすべてのファイルにアクセスできる他、サブディレクトリのリストにもアクセスできます。ただし、このオプションの場合はサブディレクトリ内のファイルには一切アクセスできません。

また、ColdFusion タグおよび関数からサンドボックスの外側にあるファイルやディレクトリに対して実行可能なアクションも指定できます。次の表に、ファイルおよびディレクトリのアクセス許可の関係を示します。

アクセス許可

ファイルに対する意味

ディレクトリに対する意味

読み込み

ファイルの表示

ディレクトリ内のすべてのファイルのリスト

書き込み

ファイルへの書き込み

該当なし

実行

ファイルの実行

該当なし

削除

ファイルの削除

ディレクトリの削除

サンドボックスを追加する (エンタープライズ版のみ)

ColdFusion エンタープライズ版では、複数のセキュリティサンドボックスを定義できます。

  1. ColdFusion Administrator の [セキュリティ]-[サンドボックスセキュリティ] ページを開きます。

    [サンドボックスセキュリティ許可] ページが表示されます。

  2. [セキュリティサンドボックスの追加] ボックスに新しいサンドボックスの名前を入力します。この名前は、ColdFusion マッピング (Administrator で定義) または絶対パスのいずれかでなければなりません。

  3. ドロップダウンリストから [新規のサンドボックス] を選択して、デフォルトサンドボックスをベースにしてサンドボックスを作成するか、または既存のサンドボックスを選択してその設定を新しいサンドボックスにコピーします。

  4. 「追加」をクリックします。

    [定義されたディレクトリ権限] リストに新規サンドボックスが表示されます。

サンドボックスの設定

セキュリティサンドボックスの設定を開始する前に、アプリケーションとその使い方を解析し、アプリケーションが必要とするタグ、関数、およびリソースを決定します。その後でサンドボックスを設定して、必要なリソースへのアクセスを有効化することや、適切なタグおよび関数の使用を無効にすることができます。たとえば、サンドボックス内のアプリケーションが cfregistry タグを使用しない場合は、そのタグを無効にしても問題ありません。

注意: スタンダード版では、ルートセキュリティコンテキストが唯一のサンドボックスです。ここには、定義済みのディレクトリ権限の初期リストが存在しません。
  1. ColdFusion Administrator で [セキュリティ]-[サンドボックスセキュリティ] ページ (スタンダード版の場合は [セキュリティ]-[リソースセキュリティ] ページ) を開きます。

  2. (エンタープライズ版のみ) [定義されたディレクトリ権限] リストで、ディレクトリの名前または [編集] アイコンをクリックします。

    複数のタブがあるページが表示されます。スタンダード版では、これが初期ページです。この後の手順では、各タブの使い方を説明します。

  3. データソースを無効にするには、[データソース] タブの左側の列で、無効にするデータソースをハイライトし、右矢印をクリックします。

    デフォルトでは、このサンドボックス内の ColdFusion ページはすべてのデータソースにアクセスできます。

    注意: [有効化されたデータソース] 列に <すべてのデータソース> がある場合は、追加するすべてのデータソースが有効になります。<すべてのデータソース> を [無効化されたデータソース] 列に移動すると、新しいデータソースはすべて無効になります。
  4. [CF タグ] タブをクリックします。

  5. タグを無効にするには、[CF タグ] タブの左側の列で、タグをハイライトし、右矢印をクリックします。

    デフォルトでは、このサンドボックスにある ColdFusion ページは、リストされたタグすべてにアクセスすることができます。

  6. [CF 関数] タブをクリックします。

  7. 関数を無効にするには、[CF 関数] タブの左側の列で関数を強調表示して、右矢印をクリックします。

    デフォルトでは、このサンドボックスにある ColdFusion ページは、リストされた関数すべてにアクセスすることができます。

  8. [ファイル/ディレクトリ] タブをクリックします。

  9. ファイルまたはディレクトリを有効にするには、[ファイルのパス] ボックスに、ファイルまたはディレクトリを入力して (例 : C:¥pix など) ブラウズします。特殊トークン <<ALL FILES>> があるファイルパスはすべてのファイルを指します。円記号とハイフン (¥-)、円記号とアスタリスク (¥*) の 2 つのワイルドカード文字を使用する方法については、ディレクトリとアクセス許可についてを参照してください。

  10. 適切な権限を選択します。

    たとえば、[読み込み] チェックボックスをオンにすると、mytestapps サンドボックス内の ColdFusion ページは C:¥pix ディレクトリにあるファイルを読み取ることができます。

  11. [ファイル/パスの追加] をクリックします。既存のサンドボックスを編集するときは、このボタンには [ファイル/パスの編集] と表示されます。

    ファイルのパスおよびその権限が [保護されたファイルとディレクトリ] リストに表示されます。

  12. [保護されたファイルとディレクトリ] リストで、ファイルのパスが正しいことを確認します。

    円記号 (¥) の後の文字は重要です。詳細については、ディレクトリとアクセス許可についてを参照してください。

    注意: [ファイル/ディレクトリ] タブは、オペレーティングシステムのファイルベースのアクセス許可と連動します。ユーザーが別のユーザーのディレクトリをブラウズしないように制限するには、ファイルベースのアクセス許可を使用します。
  13. [サーバー/ポート] タブをクリックします。

  14. デフォルトの動作 (すべてのサーバーおよびポートへのグローバルアクセス) をオフにするには、このサンドボックス内のページが、外部リソースにアクセスするタグ (たとえば cfmailcfpopcfldapcfhttp) を使用して接続できる IP アドレスとポート番号を入力します。指定できるのは、IP アドレス、サーバー名 (www.someservername.com など)、またはドメイン名 (someservername.com など) です。また、必要に応じてポートの制限も指定できます。

    注意: ここでは、有効にする項目を選択するのであって、[CF タグ] などの他のタブで無効にする項目を選択する場合とは異なります。このタブに値を設定した場合、このサンドボックス内で実行された外部リソースタグは、指定されたサーバーおよびポートのみにアクセスできます。

    たとえば、このサンドボックスが、ポート番号 80 以下にある 207.88.220.3 にアクセスするには、次の手順を実行します。

    1. [IP アドレス] フィールドに「207.88.220.3」と入力します。

    2. [ポート] フィールドに「80」と入力し、[このポートとそれ以下] をクリックします。

    注意: これらの ColdFusion タグによるサイト全体へのアクセスを拒否するには、ローカルメールサーバーや FTP サーバーなどローカルリソースへのアクセスを有効にしてください。
  15. [終了] をクリックして、サンドボックスの変更を保存します。

サンドボックスについての注意事項

サンドボックス内での OpenOffice の使用

次のファイルパスに対して、サンドボックスの権限を付与する必要があります。
  • D:¥ColdFusion10¥cfusion¥runtime¥servers¥lib - 読み取り

  • D:¥ColdFusion10¥cfusion¥runtime¥servers¥lib¥ - 読み取り

  • D:¥ColdFusion10¥cfusion¥runtime¥lib¥ - 読み取り

  • D:¥ColdFusion10¥cfusion¥runtime¥lib - 読み取り

  • C:¥Program Files¥OpenOffice.org 3¥ - 読み取り、実行

  • C:¥Program Files¥OpenOffice.org 3¥ - 読み取り

、実行

サンドボックス内でのキャッシングの使用

サンドボックス内でディスクベースのキャッシングを使用するには、ディスクキャッシュディレクトリに対する読み取り / 書き込み権限をサンドボックスで付与する必要があります。このフォルダには、デフォルトのディレクトリ (java.io.tmpdir) または diskStore プロパティで指定されたユーザー設定ディレクトリを使用できます。

ディスクキャッシュ用のディレクトリを指定するには、"<ColdFusion のルートディレクトリ>¥lib¥ehcache.xml" ファイルの diskStore プロパティを使用します (<diskStore path="java.io.tmpdir"/>)。一時ディレクトリを指定するには、次のコードを使用します。
<cfscript> 
writeoutput("Temp Dir : " & createobject("java","java.lang.System").getProperty("java.io.tmpdir") ); 
</cfscript>
また、"<ColdFusion のルートディレクトリ>¥lib¥ehcache.xml" に対する読み取り権限を付与しないと、ehCache.xml に対して読み取りまたは書き込みを行う関数が正しく動作しない場合があります。そのような関数の例としては、cacheGetPropertiescacheSetProperties があります。

サンドボックス内でのサービス CFC の使用

次の権限を付与する必要があります。

  • "<ColdFusion のルートディレクトリ>¥CustomTags¥com¥adobe¥coldfusion" に対する実行権限

  • "<ColdFusion のルートディレクトリ>¥WEB-INF¥cftags¥META_INF¥taglib.tld" に対する読み取り権限