我正在尝试找出配置了“cache-control max-age=0, must revalidate”的服务器和配置了“cache-control: no-cache, no-store”的服务器之间的区别。因此,首先,据我理解,它根本不缓存敏感信息,因为最大年龄为 0,并且客户端每次更改时都需要重新验证。然而,我的一些前辈提到这仍然很脆弱!!但我没有看到我的扫描仪收到该标志。所以,
- 如果有的话,我该如何通过测试来确认该漏洞?
- max-age 0 和 no-cache 有什么区别?看上去是一样的,但是后者比 no-store 更安全吗?
答案1
HTTP(S) 缓存在 RFC 7234 中定义;目前没有任何取代文档,因此您应该参考该文档。
responseno-cache
指令有点用词不当。它并不禁止缓存文档。它允许缓存文档,但会立即被视为过期文档,必须在使用前通过源服务器重新验证。您会注意到,这与 的语义完全相同max-age=0, must-revalidate
。在这两种情况下,内容都会被缓存,如果服务器对验证请求发送 304 响应,则可以使用缓存的文档。
要实际请求缓存不缓存文档,您可以使用no-store
。在这种情况下,甚至没有必要严格指定,no-cache
因为文档无论如何都不会被缓存!但这可能比no-cache
单独指定慢得多,因为每次用户访问时都必须重新下载整个文档。
也许您用作示例的其中一条Cache-Control
指令不包含no-store
您的上级所指的内容,但将其称为“漏洞”却严重夸大其词,而这是否是一个安全问题(尽管这通常是隐私问题)取决于您所提供的内容。
在大多数情况下,当您发送特定于用户的信息时,设置Cache-Control: private
并允许用户的浏览器缓存数据就足够了,而共享缓存不会缓存数据。我想不出真正需要做多少事情no-store
,除了私钥、核发射代码、每 15 秒更改一次的数据等……