资源 · 63

HTTP 缓存:保护个性化响应

分离共享缓存、私有缓存和应用程序缓存,检查密钥,并在访问权限更改后进行重新验证和失效处理。

已更新 · 3 min

本指南有助于实现的目标

  • 清单层
  • 选择保留策略
  • 检查密钥
  • 执行重新验证和更改

快速检查

  • 无缓存是否意味着不保留任何内容?
  • Vary 是否保护访问权限?
  • 每个 API 都应该缓存吗?

分步指南

  1. 1

    清单层

    列出浏览器、CDN、代理、Service Worker 和应用程序缓存。 对公共响应和个性化响应进行分类。 HTTP 策略不会自动描述代码中实现的缓存。

    交付物:层和所有者图。

  2. 2

    选择保留策略

    RFC 9111 区分了指令:no-cache 要求在重用前进行验证,no-store 禁止相关的 HTTP 存储,而 unqualified private 排除共享存储。 单独使用 None 并不能保证系统机密性。

    交付成果:每个响应的保留策略。

  3. 3

    检查密钥

    检查方法、URI 和维度如何改变表示形式。 Vary 关注请求字段;它不涉及授权。 在应用层查找省略的语言、格式协商和帐户上下文。

    交付成果:密钥和分离测试。

  4. 4

    执行重新验证和更改

    测试新响应和过期响应、数据更新和已撤销的权限。 检查 ETag、条件验证和源不可用行为。 撤销后,以前正确的响应可能变得敏感。

    交付成果:攻击前后的跟踪记录。

  5. 5

    使用两个账户进行重放攻击。

    使用虚拟身份和标记。 交替使用热缓存和冷缓存向同一 URI 发送请求。 在不记录真实令牌的情况下,检查注销、直接链接和日志记录。

    交付成果:负面测试和失效策略。

可重复使用的工作表

填写您已授权的观察结果。 这些字段是工作模板,而非观察结果。

字段待记录信息
响应公共或个性化;维度
层缓存、所有者和密钥
策略保留、新鲜度和验证
试验虚构帐户、更改和观察

虚构示例

示例情境

虚构示例:CDN 对两个测试帐户在同一 URI 处重复使用配置文件响应。

决策及预期证据

该场景检测泄露,检查策略和密钥,然后在纠正和撤销访问权限后重放。

区分机制

机制目的验证或限制
无缓存允许存储并进行必要的验证不要将其解读为禁止存储
不限定的私有排除共享缓存不要将其解读为保密性保证
无存储阻止相关的 HTTP 存储分别检查应用程序缓存和历史记录

管理指标

指标衡量内容首要行动
账户分离禁止来自其他账户的标记检查正文、链接和元数据
过期时间和验证按照策略重用测试过期时间和不可用源
失效延迟直到更正表示的时间命名每个仍然过期的层

常见错误

  • 不要将其解读为禁止存储
  • 不要将其解读为保密性保证
  • 分别检查应用程序缓存和历史记录

常见问题解答

无缓存是否意味着不保留任何内容?

否。 它要求在重用之前进行验证;它不像无存储那样禁止存储。

Vary 是否保护访问权限?

否。它参与表示选择; 授权仍然独立进行。

每个 API 都应该缓存吗?

否。收益取决于成本、新鲜度和风险。 敏感响应可能需要避免共享缓存。

官方参考文献

参考文献支持该方法。 请根据您的实际情况调整检查;它们并非认证。 原始参考文献标题和源文档可能使用其他语言。

参考资料查阅日期 .