建立 CSP 和安全头部的标准
我们将学习如何采用新的浏览器和HTTP安全标准,并制定从旧HTTP头迁移的计划。
X-Frame-Options
我们之前已经讨论过,使用 X-Frame-Options 响应头有助于防范 Web 应用中的点击劫持安全漏洞。
然而,技术实践在不断演进,浏览器也在快速采纳新的标准和机制。例如,X-Frame-Options 头部的 ALLOW-FROM 值已被弃用,目前不推荐使用,因为现代浏览器版本已不再支持该功能。
作为迁移方案,内容安全策略(Content Security Policy, CSP)提供了一种适应新标准的方式。其中,CSP 的 frame-ancestors 指令就是一种典型应用。例如,将该指令设置为 'none',其效果应与 X-Frame-Options 设置为 DENY 相同。
一个更完整的、用于防范点击劫持的安全控制示例是:
1Content-Security-Policy: frame-ancestors 'none';
上述 CSP 策略将禁止任何 URL 在 iframe、object 及其他属于 frame-ancestors 策略范围内的 HTML 元素中嵌入内容。
需要注意的是,较老的浏览器可能不支持 Content-Security-Policy 及其相关指令。因此,如果仅依赖 CSP,反而可能导致安全防护能力下降。
为了避免此类问题,建议根据所支持的浏览器版本矩阵,同时使用旧版和新版头部,以确保全面覆盖所有环境。
X-XSS-Protection
与 X-Frame-Options 的情况类似,X-XSS-Protection 头部也已被弃用,应强制要求建立并部署内容安全策略(CSP)HTTP 头部来替代。
尽管在面向老旧浏览器时仍可保留此头部作为辅助手段,但需注意:Chrome 和 Edge 已移除其 XSS 审计器,Firefox 也未计划实现对 X-XSS-Protection 的支持。
以下是该头部在各浏览器中的兼容性情况(摘自 MDN):

总结
随着新技术的不断发展,安全控制措施也需要持续调整和更新。这并不意味着我们此前研究的两个安全头部毫无价值。关键在于明确它们在当前场景下的适用性,并制定向更先进标准迁移的路径,最终逐步取代这些旧有机制。