我正在尝试将我的cookie CFIDE和CFTOKEN设置为Coldfusion 9中的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)。
答案 0 :(得分: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文件中。
http://www.adobe.com/devnet/coldfusion/articles/coldfusion-securing-apps.html
答案 1 :(得分:1)
您可以使用PageContext对象在cfscript中设置cookie:
getPageContext().getResponse().addHeader("Set-Cookie", "CFID=#session.CFID#;path=/;HTTPOnly");
getPageContext().getResponse().addHeader("Set-Cookie", "CFTOKEN=#session.CFTOKEN#;path=/;HTTPOnly");
答案 2 :(得分: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