Coldfusion 10跨域HTTPS会话问题

时间:2014-04-02 23:38:56

标签: session tomcat cookies coldfusion https

只是想知道是否有人在CF10中遇到过一个问题,即当在HTTPS下的同一个应用程序的子域之间交叉时,会话被删除,即使这些链接中明确传递了JSESSIONID已经为我们工作了5年以上而没有在CF10之前失败。从我所看到的内容来看,解决CF10中的Session Fixation安全问题似乎发生了很大的变化,这解释了为什么会话会在HTTP和HTTPS之间跳跃,但这并不能解释我的问题。我理解CF 9.02和CF中引入的会话修复更改肯定会对我们通过URL传递JSESSIONID产生影响,但是这个行为已被删除,但会话仍在删除。

基本上,我们安装了CF10,并启用了J2EE会话管理,默认HTTPOnly设置为true。这是具有相同应用程序名称的单个CF应用程序,setClientCookies为false,在应用程序中,域结构如下所示:

https://book.domain.com
https://profile.domain.com
https://approve.domain.com

当域之间的交叉(之前已经工作了很多年)时,会话会丢失,CF会发出一组新的会话标识符。

即使在onSessionStart()中设置cookie如下也没有效果:

<cfcookie name="jsessionid" value="#session.sessionid#" domain=".domain.com" secure="true">

有没有人遇到过这种迁移到CF10的行为?

干杯 菲尔

1 个答案:

答案 0 :(得分:2)

因此,在使用了大量设置和想法之后,我现在可以通过HTTPS和使用安全(基于浏览器的)cookie在原始问题中提到的子域之间进行会话,从而满足PCI-DSS合规性要求。通过URL传递的所有JSESSIONID都已从系统中删除,并且以下行添加到Application.cfc中,用于构造函数和onSessionStart()。请注意setDomainCookies和setClientCookies设置为false以及下面的Domain特定sessioncookie设置,并在onSessionStart中注意我的cookie设置没有到期以确保它只持续浏览器的持续时间,并且新的CF10 encodeValue属性可以防止奇怪的编码cookie值的问题:

<cfcomponent hint="Application" output="false">

<cfscript>

   // Application Settings
   this.name = "myApplication";
   this.applicationTimeout = createTimeSpan(0,2,0,0);
   this.clientManagement = false;
   this.loginStorage = "session";
   this.sessionManagement = true;
   this.sessionTimeout = createTimeSpan(0,1,0,0);
   this.setClientCookies = false;
   this.setDomainCookies = false;

   // Domain specific settings for session persistence over subdomains
   this.sessioncookie.domain = '.domain.com';
   this.sessioncookie.httponly = true;

</cfscript>

<cffunction name="onSessionStart" returnType="void" output="false">
    <cfcookie name="jsessionid" value="#session.sessionid#" secure="true" domain=".domain.com" encodeValue="false">
</cffunction>

</cfcomponent>