【问题标题】:Should HTTP 404 Not Found responses with Set-Cookie directive contain cache-control headers带有 Set-Cookie 指令的 HTTP 404 Not Found 响应是否应该包含缓存控制标头
【发布时间】:2016-10-02 13:25:34
【问题描述】:

在某些情况下,当我的应用程序响应 404 Not Found 代码时,它还会返回带有会话标识符的 Set-Cookie 指令,但没有 Cache-Controle 或 Pragma 指令。这是否意味着会话标识符可以存储在浏览器缓存中,这是否会影响应用程序的安全性?我不确定是否所有使用 Set-Cookie 的响应都应该包含缓存指令。

【问题讨论】:

    标签: security caching cookies http-headers cache-control


    【解决方案1】:

    cookie 是否永久存储在浏览器中由Expires and Max-Age properties 控制。 Cache-Control 和 Pragma 标头仅影响页面内容。所以我认为即使没有明确的缓存头(* 但请参阅下面的编辑),你在 404 页面上也很好。

    应始终设置会话 cookie,但没有明确的到期日期,在这种情况下,它们通常不会存储在磁盘上,并且会在用户退出浏览器时被删除。

    (请注意,在某些情况下,内存中的此类数据仍会持久保存到磁盘,例如当用户决定休眠或计算机内存不足并开始交换时,这是您无法控制的。)

    编辑(参见 cmets):

    对于设置 cookie 的普通页面,您通常会使用标题来防止缓存敏感信息,例如 Cache-control: no-cache,no-store,must-revalidate。我认为这本质上也包括不缓存 cookie 响应,因此您无需在普通页面上显式设置它。

    那么问题来了,在 404 页面上设置了什么 cookie?如果未经身份验证的用户下载 404 页面并获取会话 cookie,则该 cookie 对攻击者来说是无用的,因为应用程序不应受到会话固定的影响(无论如何,cookie 值应该在登录时更改)。如果它是经过身份验证的用户,为什么应用程序会再次在 404 页面上设置会话 cookie?如果确实如此,您应该发送标头以防止缓存,这是 Skipfish 的一个很好的捕获。 (事实上​​,您也可以为未经身份验证的用户执行此操作,但我认为这是非常低的风险。)

    【讨论】:

    • 感谢您的回复。我问这个问题是因为在这种情况下 Skipfish 返回问题不正确的缓存指令(更高的风险) - 隐式缓存的“Set-Cookie”响应。你认为这只是假阳性结果吗?
    • 在网上搜索一些信息我资助this 建议使用Cache-Control: no-cache="set-cookie"
    • 我会在一分钟内编辑答案,谢谢你指出这一点,有趣。
    猜你喜欢
    • 2010-12-07
    • 2012-10-02
    • 2011-06-07
    • 2019-08-01
    • 1970-01-01
    • 2012-12-08
    • 2021-08-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多