説明
ColdFusion アプリケーションのスコープを定義します。クライアント変数のストレージを有効または無効にし、クライアント変数のストレージメカニズムを指定します。また、セッション変数を有効にし、アプリケーション変数のタイムアウトを設定します。
カテゴリ
シンタックス
<cfapplication datasource="data_source_name" name = "application name" applicationTimeout = #CreateTimeSpan(days, hours, minutes, seconds)# clientManagement = "yes|no" clientStorage = "data_source_name|Registry|Cookie" loginStorage = "cookie|session" passarraybyreference = "true | false" searchimplicitscopes = "true | false" googleMapKey = "map key" scriptProtect = "none|all|list" serverSideFormValidation = "yes|no" sessionManagement = "yes|no" sessionTimeout = #CreateTimeSpan(days, hours, minutes, seconds)# setClientCookies = "yes|no" setDomainCookies = "yes|no" compileextforinclude = "comma_separated_list" strictnumbervalidation = "true|false">
注意:このタグの属性は attributeCollection で指定でき、その値は構造体になります。attributeCollection で構造体の名前を指定し、タグの属性名を構造体のキーとして使用します。 |
関連項目
cfassociate 、 cferror 、 cflock 、 cfmessagebox 、Application.CFC 参照、『ColdFusion アプリケーションの開発』の ColdFusion アプリケーションの設計と最適化および CFML アプリケーションへの JEE および Java 要素の統合
履歴
ColdFusion(2018 リリース)アップデート 9 および ColdFusion(2016 リリース) アップデート 15:SameSite 属性を使用したり、構造体を authCookie に渡したりできます。次のスニペットを参照してください。
ColdFusion 11:属性を追加しました - compileextforinclude および strictnumbervalidation
ColdFusion 9: datasource 、googleMapKey および serverSideFormValidation 属性が追加されました。ColdFusion 8:secureJSON および SecureJSONPrefix 属性が追加されました。ColdFusion MX 7:scriptProtect 属性が追加されました。ColdFusion MX 6.1:loginStorage 属性が追加されました。ColdFusion MX:
- パーシスタントスコープの使用方法が変更されました。Server、Session、および Application スコープ変数が、メモリに構造体として保管されます。以前のリリースでは、Session スコープおよび Application スコープの変数だけがこの方法で保管されていました。また、UDF 関数のスコープには、構造体としてはアクセスできません。
- CFTOKEN 変数値を設定するアルゴリズムが変更されました。レジストリキー UUIDToken が 0 でない場合、ColdFusion では UUID から構築された数に乱数を加えた数が使用されます。UUIDToken が 0 の場合は、正の乱数 (整数) を使用して CFTOKEN 変数のデフォルト値が設定されます。以前のリリースでは、常に UUID から構築された数に乱数を加えた数が使用されていました。
属性
属性 |
必須/オプション |
デフォルト |
説明 |
---|---|---|---|
authCookie |
オプション |
|
ColdFusion の認証 Cookie 関連のプロパティが含まれる構造体です。 |
datasource |
オプション |
|
クエリーによってデータを取得するデータソースの名前です。 |
name |
「説明」を参照 |
|
アプリケーション名です。長さは 64 文字までです。 |
applicationTimeout |
オプション |
ColdFusion Administrator の [変数] ページ内に指定された値 |
アプリケーション変数の有効期限です。CreateTimeSpan 関数と日付、時刻、分、および秒の値をカンマで区切って指定します。 |
clientManagement |
オプション |
no |
|
clientStorage |
オプション |
registry |
クライアント変数の保管方法を示します。
|
exchangeServerVersion |
オプション |
2007 |
Microsoft Exchange Server のバージョンを指定します。有効な値は次のとおりです。
|
googleMapKey |
オプション |
|
Web ページに Google マップを埋め込むために必要な Google Map API キーです。 |
loginStorage |
オプション |
cookie |
|
passArrayByReference |
オプション |
False |
配列を参照で渡す場合は True。 |
searchImplicitScopes |
オプション |
True |
暗黙的なスコープをデフォルトで検索しない場合は False。この属性は、次の暗黙的なスコープでの検索をカバーします。
|
scriptProtect |
オプション |
ColdFusion Administrator の [グローバルなスクリプト保護] の設定に基づいて決定されます。 |
変数をクロスサイトスクリプティング攻撃から保護するかどうかを指定します。
グローバルなサイト保護を有効にすると、Null バイト(%00)が すべて %20 に置き換えられます。 この保護機能の一環として、Null バイトインジェクション攻撃を防ぐための設定です。 この保護機能を Cookie スコープでのみ無効にする場合は、回避策として以下を実行できます。
|
secureJSON |
オプション |
Administrator の値 |
|
serverSideFormValidation |
オプション |
yes |
no の場合、フォームの送信時に cfform フィールドでの検証を無効にします。 |
secureJSONPrefix |
オプション |
Administrator の値 |
secureJSON の設定が true の場合に、リモート呼び出しへの応答として ColdFusion 関数が JSON 形式で返す値の前に挿入するセキュリティの接頭辞です。デフォルト値は、Administrator のサーバーの設定/設定ページの「シリアル化 JSON への接頭辞付加」設定の値(デフォルトは JavaScript のコメント文字である //)です。 |
sessionCookie |
オプション |
|
ColdFusion のセッション Cookie 関連のプロパティが含まれる構造体です。 |
sessionManagement |
オプション |
no |
|
sessionTimeout |
オプション |
ColdFusion Administrator の [変数] ページ内に指定された値 |
Life span セッション変数の有効期限です。CreateTimeSpan 関数と日付、時刻、分、および秒の値をカンマで区切って指定します。 |
setClientCookies |
オプション |
yes |
|
setDomainCookies |
オプション |
no |
|
compileextforinclude | オプション | <cfinclude> タグの(カンマ区切りのリストとして)許可されるファイル拡張子のリストを指定します。リスト内にワイルドカード('*')を指定すると、<cfinclude> タグを使用してインクルードされたすべてのファイルがコンパイル対象になります。<cfinclude> タグを使用してインクルードされたファイルがこのリストにない場合、その内容はスタティックにインクルードされます。デフォルトでは、拡張子 cfm および cfml を持つファイルは、常に、この設定に関係なくコンパイルされます。 cfinclude を参照してください。 |
|
strictnumbervalidation | オプション | true | ColdFusion 10 およびそれ以前のバージョンでは、IsValid 関数は、最初の通貨記号と数字内のカンマを許可していました。 ColdFusion 11 からは、この関数は、より厳格に評価します。この値を false に設定すると、isValid 関数は以前の方法で動作します。この設定は、整数および数値の検証が使用されている場所にかかわらず、 cfargument 、 cfparam および cfform タグに影響します。この設定に基づいて、検証がこれらのタグにも反映されます。 |
使用方法
このタグは、通常 "Application.cfm" ファイル内で、ColdFusion アプリケーションのデフォルト値を設定するために使用されます。
注意:Application.cfc ファイルでアプリケーションのデフォルト値を設定することもできます。詳しくは、アプリケーション変数を参照してください。 |
このタグが ColdFusion Administrator 内で無効になっていない限り、このタグを使用してアプリケーション 変数 を有効にすることができます。また、Administrator 設定は sessionManagement 属性よりも優先されます。詳しくは、『ColdFusion 設定と管理』を参照してください。ColdFusion がクラスター上で実行されている場合、clientStorage = "cookie" またはデータソース名を指定します。"registry" は指定できません。アプリケーション名が 64 文字を超えると、エラーが発生します。CFTOKEN 変数の長さは 8 バイトで、範囲は、10000000 ~ 99999999 です。
注意:ClientStorage=cookie を指定すると、 cfflush タグに続いて設定された Client スコープ変数は、クライアントブラウザーに保存されません。 |
クロスサイトスクリプティング攻撃からの変数の保護
ScriptProtect 属性を使用すると、1 つ以上の変数スコープをクロスサイトスクリプティング攻撃から保護できます。この攻撃では、クライアントがユーザーのアプリケーションを利用して 悪意のある コードをユーザーのブラウザーに送信しようとします。この攻撃では、フォームフィールドや URL 変数のユーザー入力により、ユーザー出力用の CF 変数が設定されます。送信されたデータには悪意のあるコード(JavaScript、アプレット、オブジェクト参照)が含まれ、ユーザーのシステム上で実行されます。
注意:デフォルトのスクリプト保護設定は、ColdFusion Administrator の設定ページにある「グローバルなスクリプト保護」オプションによって決定されます。scriptProtect 属性を使用すると、Administrator での設定よりも優先されます。Application.cfc 初期化コードを使用して保護に関する値を設定することもできます。 |
ColdFusion のクロスサイトスクリプティング保護処理は、ColdFusion がリクエストの最初にアプリケーション設定を処理するときに実行されます。したがって、ユーザーのリクエスト内の URL、Cookie、CGI、およびフォーム変数を処理することができます。デフォルトでは、object、embed、script、applet および meta の各 HTML タグ名をテキスト InvalidTag に 置き換えます。これらの名前をプレーン テキスト で示すことが可能になり、タグ名として使われた場合はその名前を置換します。ColdFusion のスコープの一部または全部を保護対象に指定することができます。ただし、未知のソースからの変数を持つことがあるのはフォーム、URL、CGI、および Cookie のスコープだけです。スコープを保護するには、追加の処理も必要になります。このため、all 属性の値はこれら 4 つのスコープだけに保護を適用します。
スクリプト保護のメカニズムでは、サーバー設定の cf_root/lib/neo-security. xml ファイルまたは JEE 設定の cf_root/WEB-INF/ cfusion /lib/neo-security. xml ファイルで定義される正規表現を変数値に適用します。CrossSiteScriptPatterns 変数の正規表現を修正することで、ColdFusion の置換パターンをカスタマイズできます。
サーバー変数、アプリケーション変数、およびセッション変数のロック
Server、Application および Session スコープの変数を設定または更新する場合は、scope 属性を次の値に設定した状態で cflock タグを使用します。
- サーバー変数の場合は、server を指定します。
- アプリケーション変数の場合は、application を指定します。
- セッション変数の場合は、session を指定します。
場合によっては、これらのスコープで変数を読み取るコードをロックする必要もあります。スコープのロック方法については、 cflock を参照してください。
例
<!--- This example shows how to use cflock to prevent race conditions during data updates to variables in Application, Server, and Session scopes. ---> <h3>cfapplication Example</h3> <p>cfapplication defines scoping for a ColdFusion application and enables or disables application and/or session variable storage. This tag is placed in a special file called Application.cfm that automatically runs before any other CF page in a directory (or subdirectory) where the Application.cfm file appears.</p> <cfapplication name = "ETurtle" sessionTimeout = #CreateTimeSpan(0, 0, 0, 60)# sessionManagement = "Yes"> <!--- Initialize session and application variables used by E-Turtleneck. ---> <cfparam name="application.number" default="1"> <cfparam name="session.color" default= ""> <cfparam name="session.size" default=""> <cfif IsDefined("session.numPurchased") AND IsNumeric(trim(session.cartTotal))> <!--- Use the application scope for the application variable to prevent race condition. This variable keeps track of total number of turtlenecks sold. ---> <cflock scope = "Application" timeout = "30" type = "Exclusive"> <cfset application.number = application.number + session.numPurchased> </cflock> </cfif> <cfoutput> E-Turtleneck is proud to say that we have sold #application.number# turtlenecks to date. </cfoutput> <!--- End of Application.cfm --->
例 - SameSite 属性
<cfset cookiest = {httponly='true', timeout=createTimeSpan(1, 0, 0, 0), samesite='Strict | Lax | None'}> <cfset authcookiest = {samesite='Strict | Lax | None'}> <cfapplication name="newApp" sessionmanagement="Yes" authCookie=#authcookiest# sessioncookie=#cookiest# >