首页 > 解决方案 > 无法通过 ColdFusion 在浏览器中禁用 HttpOnly 标志

问题描述

在我们的应用程序中,我们使用 J2EE 会话变量进行会话管理。我们最近从 ColdFusion 9 迁移到 ColdFusion 2018。迁移后,注销功能无法正常工作。我们发现,在 ColdFusion 2018 中,cookie JSESSIONID 没有从浏览器中清除,因为浏览器中的 HttpOnly 标志已设置为 true。

我们尝试通过以下方式在浏览器中禁用此 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 admin 中的设置后重新启动 CF 服务。

标签: coldfusioncoldfusion-9cookie-httponlycoldfusion-2018

解决方案


您可能必须重构您的应用程序以解决 CF 9 开箱即用无法处理的许多 OWASP 漏洞。根据您的受众,您应该让第三方对您的代码库执行安全渗透测试。

您将需要重构您的注销过程。您不应该禁用cookie,它httpOnly可以jsessionid防止跨站点脚本攻击。

https://www.owasp.org/index.php/HttpOnly

根据 Microsoft Developer Network,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()>

然后重定向到另一个页面,例如您的登录屏幕。这将删除jsessionidcookie 并实际上使服务器上的 JEE 会话无效。


推荐阅读