ColdFusion 10 でのCFセッション Cookie(CFID, CFTOKEN)の動作について

ColdFusion 10 からCFセッション Cookie(CFID, CFTOKEN) の管理が強化されました。

  1. CFTOKENの値にUUIDを含める設定が新規インストール時にデフォルトで有効に設定されます。
    • 旧バージョンにも同様の設定がありましたが、デフォルトは無効に設定されていました。
  2. セッションID Cookie の発行時にHTTPOnly属性がデフォルトで付加されるようになりました。
    • ColdFusion Administrator での設定やプログラムによりHTTPOnly属性の有効・無効を切り替えることができます。
    • ColdFusion 9.0.1, 9.0.2 では、「-Dcoldfusion.sessioncookie.httponly=true」を システムプロパティに追加することで HTTPOnly属性を付加することができましたが、このプロパティ値はColdFusion10では廃止されました。
      (参考)
      ColdFusion 9.0.1 以降 セッションID Cookie に httpOnly を付ける
       
  3. ColdFusion 10 からは、CFセッションCookie に関する設定(タイムアウト時間の変更や HTTPOnly・セキュアCookieの有効/無効など)が行えるようになりました。設定は、Administrator の [サーバーの設定] -「メモリ変数」画面の『セッション Cookie 設定』で行えるほか、サーバーレベルの設定や、Application.cfc, Application.cfm でのアプリケーションレベルでの設定ができるようになりました。

    (参考)ColdFusion Administrator の [サーバーの設定] -「メモリ変数」の『セッション Cookie 設定』画面

 

上記の変更に伴い、これまでColdFusionバージョンで、プログラム等によって手動でCFID,CFTOKEN Cookieの値を操作(変更)していた人は注意が必要です。例えば、これまではCFID,CFTOKEN Cookieのタイムアウト値を手動で変更したり、破棄する方法が提供されていなかったため、プログラムで<cfcookie>タグを使ってそれらの値を手動で変更を行うというテクニックが紹介されていました。

(参考記事)
http://www.adobe.com/jp/support/coldfusion/ts/documents/tn17915.htm
(ColdFusion (全バージョン):セッション毎のCookieとして CFID, CFTOKEN を記述するには)
※記事のタイトルに全バージョンと書かれていますが、記事が作成された当初(MX6.1)の情報のため、ColdFusion10には該当しません。

ColdFusion 10では、同様の方法でCFセッションCookieの設定を変更しようとしても、上記「3.」の設定が優先されるため、変更が効きません。そのためCFセッションCookieの操作はこれまでと違う方法で行う必要があります。

2015.4 追記
その後にリリースされたアップデートにより、「ColdFusion のタグ / 関数を使用して ColdFusion の内部 Cookie を更新できないようにします。」のチェックを外すことにより、従来の方法でセッションCookieの手動による変更が再び有効になりました(既にセッションCookieがブラウザに存在する場合、そのCookieを上書きする形で対応)。

 

■ ColdFusion 10 で CFID, CFTOKEN Cookieのタイムアウト時間を変更する場合

 

ColdFusion Administrator の[サーバーの設定] -「メモリ変数」画面でタイムアウト時間を設定するか、サーバーレベル、または、アプリケーションレベルでタイムアウト時間を変更するプログラムを追記します。下記のページに記載されている設定をプログラムに追加する必要があります。

http://help.adobe.com/ja_JP/ColdFusion/10.0/Developing/WSe61e35da8d3185183e145c0d1353e31f559-7ffc.html
(CF セッション Cookie(CFID、CFTOKEN、CFAuthorization_<app-name>))

Application.cfc または Application.cfm に記載するコード例は、下記のメーカーサイトの記事(英語)をごらんください。

http://www.adobe.com/jp/devnet/coldfusion/articles/security-improvements.html
(Security improvements in ColdFusion 10)

補足

  • ColdFusion Administrator の[サーバーの設定] -「メモリ変数」画面の「セッション Cookie 設定」で設定可能なタイムアウト時間の最小は2分です。
  • CFID、CFTOKENは通常ブラウザ内部に保存されるパーシステントクッキーとして作成されますが、上記の「ColdFusion (全バージョン):セッション毎のCookieとして CFID, CFTOKEN を記述するには」のテクニックに従ってセッションクッキーに変更(上書き)されていた場合は、ColdFusion 10に移行する際にApplication.cfc, Application.cfmでのアプリケーションレベルでの設定にてタイムアウトを指定下さい。指定する時間は“-1”を指定下さい。

 

 

■ ColdFusion 10 で CFID, CFTOKEN Cookieを無効にする場合

上記の「ColdFusion (全バージョン):セッション毎のCookieとしてCFID, CFTOKENを記述するには」のテクニック(<cfcookie>で timeout="now"を指定)を使用していた場合は、ColdFusion 10に移行する際に、ColdFusion10で新たに追加された関数を利用した方法に変更下さい。

あるタイミングにてCFセッションCookieを破棄だけ行いたい場合は、SessionInvalidate()関数を使用します。また、ColdFusion10の新たな方法として、既存のセッション変数の値は維持しつつセッションのみIDを変更するSessionRotate()関数を使って、ログインに成功したタイミングなどでIDのみを変更するなども考えられます。これまでのバージョンでテクニックとして行ってきたプログラムによる手動の変更ではなく、これら関数を使用する方法に変更する事もご検討下さい。

SessionInvalidate() 
http://help.adobe.com/ja_JP/ColdFusion/10.0/CFMLRef/WS932f2e4c7c04df8f-23f56e61353e3d07d1-8000.html 

SessionRotate()
http://help.adobe.com/ja_JP/ColdFusion/10.0/CFMLRef/WS932f2e4c7c04df8f-23f56e61353e3d07d1-7fff.html

 

補足

  • 上記のSessionInvalidate() 、SessionRotate()は、CFセッションCookie(CFID, CFTOKEN)に対して有効な機能です。
  • 一つのソースの中にColdFusion10とそれ以前のバージョンとのプログラムを混在して記載したい場合は、条件分岐等を使用して切り分けを行って下さい。
    • 例)
      <cfif ListFirst(Server.coldfusion.productversion) EQ 10>
       CF10の処理
      <cfelse>
       CF10以外のバージョンの処理
      </cfif>

 


記事公開日:2013年01月23日
最終更新日:2016年02月03日


x

Sample Modal Window

This is just a sample…

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent suscipit iaculis libero sed tristique. Quisque mollis dolor non tellus placerat vitae sodales lectus porta. Curabitur ut suscipit tellus. Maecenas rhoncus, ante vitae vehicula vestibulum, metus sapien dapibus tellus, et mattis dolor neque vitae nisl. Nullam eleifend ultrices ipsum eget pretium. Curabitur semper metus ut ante adipiscing nec volutpat sem rutrum. Nullam a nisi lacus, non interdum ante. Vivamus ante augue, commodo vel egestas sed, pharetra nec dui. Quisque sed tellus felis. Donec ipsum mauris, sagittis eu accumsan in, aliquam non ipsum.

Vestibulum tempor nunc nec felis scelerisque eget elementum erat dignissim. Ut vel ipsum mollis orci venenatis luctus. Aenean vehicula quam vel quam porttitor ac iaculis elit pulvinar. Proin consequat, ipsum eu venenatis semper, justo turpis posuere tortor, ac placerat metus nisl et lectus. Nulla cursus dui id nunc ullamcorper sed semper nisl lobortis. Aliquam erat volutpat. Phasellus arcu ante, imperdiet in ornare sed, laoreet eu massa.