如何为ColdFusion Cookie设置HTTPOnly/Secure属性解决PCI扫描失败问题
方案1:ColdFusion 10及以上版本(原生配置)
直接在<cfapplication>标签中新增sessioncookie、clientcookie属性即可适配要求,修改后的完整配置如下:
<cfapplication name="testname" sessionmanagement="Yes" loginStorage="session" CLIENTMANAGEMENT="YES" SESSIONTIMEOUT=#CreateTimeSpan(0,0,30,0)# sessioncookie="httpOnly, secure" clientcookie="httpOnly, secure">
如果需要适配HTTP/HTTPS混合场景,也可以动态判断是否添加secure标识:
<cfset secureFlag = cgi.https eq "on" ? "secure" : ""> <cfapplication name="testname" sessionmanagement="Yes" loginStorage="session" CLIENTMANAGEMENT="YES" SESSIONTIMEOUT=#CreateTimeSpan(0,0,30,0)# sessioncookie="httpOnly, #secureFlag#" clientcookie="httpOnly, #secureFlag#">
方案2:ColdFusion 9及更早版本(手动覆写Cookie)
低版本CF不支持上述原生属性,可在<cfapplication>标签后追加Cookie覆写逻辑,强制给现有会话Cookie添加安全标识:
<!-- 以下代码放在<cfapplication>标签之后 --> <cfset isHttps = cgi.https eq "on"> <cfif structKeyExists(cookie, "CFID")> <cfcookie name="CFID" value="#cookie.CFID#" httpOnly="yes" secure="#isHttps#" domain="#cgi.server_name#" path="/" /> </cfif> <cfif structKeyExists(cookie, "CFTOKEN")> <cfcookie name="CFTOKEN" value="#cookie.CFTOKEN#" httpOnly="yes" secure="#isHttps#" domain="#cgi.server_name#" path="/" /> </cfif> <cfif structKeyExists(cookie, "JSESSIONID")> <cfcookie name="JSESSIONID" value="#cookie.JSESSIONID#" httpOnly="yes" secure="#isHttps#" domain="#cgi.server_name#" path="/" /> </cfif> <!-- 如有自定义会话Cookie,可参照上述格式补充 -->
验证注意事项
- 改完后可通过浏览器开发者工具「应用- Cookie」面板,查看对应Cookie的
HTTPOnly、Secure列是否已标记为启用状态 - 如站点使用CDN、反向代理,需确认代理层不会擦除Cookie的安全属性,必要时可在代理层补充规则强制添加标识
- 验证通过后可重新发起PCI扫描,确认问题已修复
内容的提问来源于stack exchange,提问作者Matthew W.
相关产品推荐
相关产品推荐

