在我们的应用程序中,我们使用J2EE会话变量进行会话管理。我们最近从ColdFusion 9迁移到ColdFusion2018。迁移后,注销功能不起作用。我们发现的是,在ColdFusion 2018中,由于未在浏览器中将HttpOnly标志设置为true,因此无法从浏览器中清除Cookie JSESSIONID。
我们尝试通过以下方式在浏览器中禁用此HttpOnly标志,
By disabling HttpOnly flag and Global Script Protection in CF admin.
By modifying the jvm.config via CF admin by adding "-Dcoldfusion.sessioncookie.httponly=false".
但是通过这种方式,HttpOnly标志仍然在浏览器中显示为已启用。因此,客户端脚本无法清除cookie JSESSIONID,因此注销功能不起作用。
在CF2018中,有没有办法在浏览器中为Cookie JSESSIONID禁用HttpOnly标志?。
注意:
[在CF9中,对于cookie JSESSIONID,在浏览器中禁用了HttpOnly标志。我们使用CF2018企业版(试用版,尚未到期)。更新CF管理员中的设置后,重新启动CF服务。
您可能必须重构应用程序以解决CF 9无法解决的许多OWASP漏洞。根据您的听众,您应该让一个第三方对您的代码库执行安全渗透测试。
您将需要重构注销过程。您不应该禁用httpOnly
Cookie上的jsessionid
,这是防止跨站点脚本攻击的预防措施。
https://www.owasp.org/index.php/HttpOnly
根据Microsoft开发人员网络,HttpOnly是Set-Cookie HTTP响应标头中包含的附加标志。使用生成Cookie时的HttpOnly标志有助于降低以下风险客户端脚本访问受保护的cookie(如果使用浏览器支持它。
https://docs.microsoft.com/en-us/previous-versions//ms533046(v=vs.85)?redirectedfrom=MSDN
使用JEE会话ID时,需要将其添加到注销过程的一部分中:
<cfset getPageContext().getSession().invalidate()>
然后重定向到另一个页面,例如您的登录屏幕。这将删除jsessionid
Cookie,并实际上使服务器上的JEE会话无效。