跳到主要内容

8. 安全考虑事项

本节旨在告知开发者、信息提供者和用户与 HTTP 缓存相关的已知安全问题. 更一般的安全考虑事项在 HTTP 消息传递 [RFC7230] 和语义 [RFC7231] 中讨论.

缓存会带来额外的潜在漏洞, 因为缓存内容对恶意利用而言是有吸引力的目标. 由于缓存内容在 HTTP 请求完成后仍然存在, 对缓存的攻击可能在用户认为信息已从网络中删除很久之后仍然泄露该信息. 因此, 缓存内容需要作为敏感信息加以保护.

特别是, 各种攻击可能因被存储在共享缓存中而被放大; 此类"缓存投毒" (cache poisoning) 攻击利用缓存将恶意载荷分发给众多客户端, 当攻击者能够利用实现缺陷、提升的权限或其他技术将此类响应插入缓存时, 这类攻击尤为有效. 缓存投毒的一种常见攻击途径是利用代理和用户代理在消息解析上的差异; 相关要求见 [RFC7230] 第 3.3.3 节.

同样, 实现缺陷 (以及对缓存操作的误解) 可能导致本应视为私密的信息 (例如认证凭据) 被缓存, 从而将其暴露给未授权的第三方.

此外, 缓存的使用本身也可能带来隐私问题. 例如, 如果两个用户共享一个缓存, 并且第一个用户浏览了某个站点, 那么第二个用户可能能够察觉对方访问过该站点, 因为得益于缓存, 该站点的资源加载得更快.

注意, Set-Cookie 响应头字段 [RFC6265] 并不阻止缓存; 带有 Set-Cookie 头字段的可缓存响应可以 (并且经常) 被用来满足对缓存的后续请求. 希望控制这些响应缓存的服务器, 应当发出适当的 Cache-Control 响应头字段.