如果带有 Set-Cookie 指令的 HTTP 404 Not Found 响应包含 cache-control headers

Should HTTP 404 Not Found responses with Set-Cookie directive contain cache-control headers

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

Cookie 是否永久存储在浏览器中由 Expires and Max-Age properties 控制。 Cache-Control 和 Pragma headers 只影响页面内容。所以我认为即使没有显式缓存 headers 你也能处理 404 页(* 但请参阅下面的编辑)。

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

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

编辑(见评论):

对于设置 cookie 的普通页面,您通常有 headers 来防止缓存敏感信息,例如 Cache-control: no-cache,no-store,must-revalidate。我认为这本质上包括不缓存 cookie 响应,因此您不需要在普通页面上明确设置它。

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