将“HttpOnly”属性添加到所有会话 cookie

Posted

技术标签:

【中文标题】将“HttpOnly”属性添加到所有会话 cookie【英文标题】:Add the 'HttpOnly' attribute to all session cookies 【发布时间】:2012-03-18 15:41:22 【问题描述】:

我在审核我的网站时收到以下错误。我使用 jsp、servlet、java 类开发了我的网站。

会话 Cookie 中缺少 HttpOnly 属性

安全风险

可能会窃取或操纵客户会话和 cookie,这可能是 用于冒充合法用户,允许黑客查看或更改用户记录, 并以该用户身份执行交易

原因:

Web 应用程序在没有 HttpOnly 的情况下设置会话 cookie 属性

修复任务:

为所有会话 cookie 添加 'HttpOnly' 属性

单击提交按钮时,我将 java 安全令牌作为隐藏参数传递。如何在该令牌中添加此 HttpOnly 属性?

【问题讨论】:

【参考方案1】:

HttpOnly 属性设置在Cookies 上,这些属性(通常)从服务器传递到客户端,而不是从客户端传递到服务器。 HttpOnly 不是您可以在表单或表单参数上设置的属性。这里客户端是浏览器,服务器是运行 Java 应用程序的 Java EE 服务器。

Cookies 通常由服务器创建,传递给浏览器,然后传回。现在可以使用 javascript 创建和操作 Cookie,这很有帮助,但也可能是一个安全漏洞。所以an HttpOnly Cookie is only accessible by the server,或者换句话说,它不能从客户端 JavaScript 访问,它可以保护您的站点免受某些形式的 XSS 攻击。因此,浏览器将存储并返回一个 HttpOnly Cookie,但它不会更改它或允许您在客户端上创建它;必须在服务器上创建一个 HttpOnly Cookie。

如果您使用 JSP,您的服务器可能会自动创建一个 Cookie 来为您管理会话;这是您需要设置 HttpOnly 属性的 cookie。 The method to set HttpOnly on your SESSIONID Cooke will be container specific.

【讨论】:

好的,但是这个服务器和客户端是什么?你能详细说明一下吗 @tom - 进一步扩展了答案。可能值得关注答案中的链接以获取更多详细信息。 是的,谢谢,还有一个疑问:如果我要在 tomcat 中进行任何修改,那么我是否也必须在客户端对 httpOnly 属性进行任何修改? 不,HttpOnly 选项仅由服务器控制。【参考方案2】:

您能否在会话 cookie 中设置“HttpOnly”属性?

我在 https://www.owasp.org/index.php/HttpOnly 上找到了执行此操作的代码

<session-config>
 <cookie-config>
  <http-only>true</http-only>
 </cookie-config>
<session-config>

【讨论】:

以上是关于将“HttpOnly”属性添加到所有会话 cookie的主要内容,如果未能解决你的问题,请参考以下文章

Zend 框架、会话和 HttpOnly

安全修复之Web——会话Cookie中缺少HttpOnly属性

如何将会话 cookie 的 HttpOnly 设置为 false?

Tomcat为Cookie设置HttpOnly属性

将会话 cookie 设置为 HttpOnly

php cookie 取消httponly