如果使用Set-Cookie指令的HTTP 404 Not Found响应包含缓存控制头

时间:2016-10-02 13:25:34

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

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

1 个答案:

答案 0 :(得分:1)

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

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

(请注意,当内存中的此类数据仍然保留在磁盘上时,有些情况会超出您的控制范围,例如当用户决定休眠,或者计算机内存不足并开始交换时。)

修改(见评论):

如果普通网页设置了Cookie,您通常会使用标头来阻止缓存Cache-control: no-cache,no-store,must-revalidate等敏感信息。我认为这本身并不包括缓存cookie响应,因此您不需要在普通页面上明确设置它。

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