1

我正在尝试在 Coldfusion 9 中将我的 cookie CFIDE 和 CFTOKEN 设置为 HTTPOnly ...

这是我尝试过的(没有错误但没有用):

cookie.CFID = "#session.cfid#,httpOnly='true'";
cookie.CFTOKEN = "#session.cftoken#,httpOnly='true'";

我也试过(不去......没有错误):

cookie.CFID = "#session.cfid#;httpOnly='true'";
cookie.CFTOKEN = "#session.cftoken#;httpOnly='true'";

而这个(我认为只适用于 CF10):

cookie.CFID = {value="#session.cfid#", httpOnly="true"};
cookie.CFTOKEN = {value="#session.cftoken#", httpOnly="true"};

然后这个(没有错误但没有工作):

cookie( name="CFID" value="#session.cfid#" httpOnly="true" );
cookie( name="CFTOKEN" value="#session.cftoken#" httpOnly="true" ); 

当我运行这些时,我会在 Chrome 中执行空缓存硬重新加载。当页面重新加载时,我应该会看到 Resources Cookies HTTPOnly 列显示复选框。

我可能已经筋疲力尽了,可能已经打到了上面的正确组合,但我因为跳得太多而误报了失败。有时缓存的东西会占我的便宜。

我有 CFML 容器样式,但我的 Application.cfc 是所有脚本样式,我想保持这种方式......那么如何在 Coldfusion 9 中执行此脚本样式?

先谢谢了!

更新我的修复:

我使用了下面的 getPageContex(),但它没有按原样工作。onSessionStart() 事件处理程序也更改为使用 CreateUUID() 创建 session.CFID 和 session.CFTOKEN,这在我的 Application.cfc 文件中也是新的。因此,对于后代来说,这就是该代码块的样子。

function onSessionStart(){
getPageContext().getResponse().addHeader("Set-Cookie", "CFID=#session.CFID#;path=/;HTTPOnly");
getPageContext().getResponse().addHeader("Set-Cookie", "CFTOKEN=#session.CFTOKEN#;path=/;HTTPOnly");
}

另一个注意事项:由于某种原因,如果会话被清除并且请求 onsessionstart() 处理程序,则上面设置的 cookie 内容将失败。必须添加一个 try catch 块或某种异常处理来解决重新加载问题。最好的办法是升级到 Coldfusion 10 的修补版本(或即将发布的 CF 11)。

4

3 回答 3

1

对于会话 cookie,有一种更简单的方法。

启用服务器范围的 HttpOnly 会话 cookie

ColdFusion 9.0.1 更新添加了一个服务器范围的设置,以将 httponly 属性添加到 ColdFusion 创建的所有会话 cookie(例如 CFID 和 CFTOKEN cookie,或 JRun 上的 JSESSIONID cookie)。要启用此设置,如果您正在运行 JRun J2EE 安装或多服务器安装,则必须编辑 jvm.config,否则您可以从 CF 管理员启用此设置。如果您正在运行 JRun 以外的 J2EE 服务器,请查阅您的文档以获取适当的设置。支持 Servlet 3.0 规范的 J2EE 服务器可以在 /WEB-INF/web.xml 文件中指定 true。

http://www.adobe.com/devnet/coldfusion/articles/coldfusion-securing-apps.html

于 2014-04-25T21:28:01.367 回答
1

您可以使用 PageContext 对象在 cfscript 中设置 cookie:

getPageContext().getResponse().addHeader("Set-Cookie", "CFID=#session.CFID#;path=/;HTTPOnly");
getPageContext().getResponse().addHeader("Set-Cookie", "CFTOKEN=#session.CFTOKEN#;path=/;HTTPOnly");
于 2014-04-26T07:51:16.100 回答
0

您可以在 onsessionstart 函数内的 application.cfc 中使用此代码。

          <cfcookie name="CFID" value="#session.cfid#" httponly="true">
          <cfcookie name="CFTOKEN" value="#session.cftoken#" httponly="true">

无法在 cfscripts 中设置它。cf9 中的脚本形式不支持 cfcookie。CF10 中添加了应用程序设置中的标志来解决此问题,但是,CF11 将在脚本中完全支持它。不幸的是,我认为您将不得不放弃功能的统一代码。除非您有权访问您的 CFIDE/管理员。您可以添加一个 java 参数以在服务器范围内打开它。将此添加到您的 JVM 配置中

-Dcoldfusion.sessioncookie.httponly=true

所有这些都在这里详细说明http://www.petefreitag.com/item/764.cfm

于 2014-04-25T21:50:00.310 回答