资源 · 63
HTTP 缓存:保护个性化响应
分离共享缓存、私有缓存和应用程序缓存,检查密钥,并在访问权限更改后进行重新验证和失效处理。
已更新 · 3 min
本指南有助于实现的目标
- 清单层
- 选择保留策略
- 检查密钥
- 执行重新验证和更改
快速检查
- 无缓存是否意味着不保留任何内容?
- Vary 是否保护访问权限?
- 每个 API 都应该缓存吗?
分步指南
- 1
清单层
列出浏览器、CDN、代理、Service Worker 和应用程序缓存。 对公共响应和个性化响应进行分类。 HTTP 策略不会自动描述代码中实现的缓存。
交付物:层和所有者图。
- 2
选择保留策略
RFC 9111 区分了指令:no-cache 要求在重用前进行验证,no-store 禁止相关的 HTTP 存储,而 unqualified private 排除共享存储。 单独使用 None 并不能保证系统机密性。
交付成果:每个响应的保留策略。
- 3
检查密钥
检查方法、URI 和维度如何改变表示形式。 Vary 关注请求字段;它不涉及授权。 在应用层查找省略的语言、格式协商和帐户上下文。
交付成果:密钥和分离测试。
- 4
执行重新验证和更改
测试新响应和过期响应、数据更新和已撤销的权限。 检查 ETag、条件验证和源不可用行为。 撤销后,以前正确的响应可能变得敏感。
交付成果:攻击前后的跟踪记录。
- 5
使用两个账户进行重放攻击。
使用虚拟身份和标记。 交替使用热缓存和冷缓存向同一 URI 发送请求。 在不记录真实令牌的情况下,检查注销、直接链接和日志记录。
交付成果:负面测试和失效策略。
可重复使用的工作表
填写您已授权的观察结果。 这些字段是工作模板,而非观察结果。
| 字段 | 待记录信息 |
|---|---|
| 响应 | 公共或个性化;维度 |
| 层 | 缓存、所有者和密钥 |
| 策略 | 保留、新鲜度和验证 |
| 试验 | 虚构帐户、更改和观察 |
虚构示例
示例情境
虚构示例:CDN 对两个测试帐户在同一 URI 处重复使用配置文件响应。
决策及预期证据
该场景检测泄露,检查策略和密钥,然后在纠正和撤销访问权限后重放。
区分机制
| 机制 | 目的 | 验证或限制 |
|---|---|---|
| 无缓存 | 允许存储并进行必要的验证 | 不要将其解读为禁止存储 |
| 不限定的私有 | 排除共享缓存 | 不要将其解读为保密性保证 |
| 无存储 | 阻止相关的 HTTP 存储 | 分别检查应用程序缓存和历史记录 |
管理指标
| 指标 | 衡量内容 | 首要行动 |
|---|---|---|
| 账户分离 | 禁止来自其他账户的标记 | 检查正文、链接和元数据 |
| 过期时间和验证 | 按照策略重用 | 测试过期时间和不可用源 |
| 失效延迟 | 直到更正表示的时间 | 命名每个仍然过期的层 |
常见错误
- 不要将其解读为禁止存储
- 不要将其解读为保密性保证
- 分别检查应用程序缓存和历史记录
常见问题解答
无缓存是否意味着不保留任何内容?
否。 它要求在重用之前进行验证;它不像无存储那样禁止存储。
Vary 是否保护访问权限?
否。它参与表示选择; 授权仍然独立进行。
每个 API 都应该缓存吗?
否。收益取决于成本、新鲜度和风险。 敏感响应可能需要避免共享缓存。
官方参考文献
参考文献支持该方法。 请根据您的实际情况调整检查;它们并非认证。 原始参考文献标题和源文档可能使用其他语言。
参考资料查阅日期 .






