【问题标题】:Should empty cookies intended to delete to be marked as secure?是否应该将要删除的空 cookie 标记为安全?
【发布时间】:2018-08-06 00:21:06
【问题描述】:

SonarQube 在以下代码中发现了一个问题 (Cookies should be "secure"):

public static void eraseSamlCookie(final HttpServletResponse response) {
    final String cookieName = Config.getParameter(Constants.SSO_COOKIE_NAME);
    if (cookieName != null) {
        final Cookie cookie = new Cookie(cookieName, ""); 
        cookie.setMaxAge(0);
        cookie.setPath("/");
        cookie.setHttpOnly(true);
        response.addCookie(cookie);
    }
}

创建cookie只是为了删除客户端同名的cookie (max-age=0)。

是否有任何合理的理由将其标记为安全?规则是否应该忽略值为空且 max-age 设置为 0 的 cookie?

【问题讨论】:

  • 就个人而言,我会说是的。因为我认为较旧的 IE(最多 8 个)版本会忽略此属性并且不删除 cookie(我没有检查过这个)。并且cookie名称应该是秘密的,并且它可以携带部分敏感信息。
  • 你说得对,老IE不支持max-age:mrcoles.com/blog/cookies-max-age-vs-expires

标签: java security cookies sonarqube


【解决方案1】:

规则描述已扩展,现在我认为它有意义。为什么?这部分很重要:

当 cookie 被设置为 true 的安全属性受到保护时,浏览器将不会通过未加密的 HTTP 请求发送该 cookie,因此在中间人攻击期间未经授权的人无法观察到该 cookie。默认情况下,安全标志设置为 false,因此如果执行了人为攻击,cookie 可能会被窃取。

在我的情况下,创建 cookie 的唯一原因是在客户端覆盖具有相同名称的 cookie。当 cookie 不安全时,有人可能会更改其内容,因此无需在客户端清理 cookie,而是可以为其提供不同的内容。意思是把它设为secure很有道理。

【讨论】:

    猜你喜欢
    • 2012-08-24
    • 2016-02-18
    • 1970-01-01
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多