← 中文资源

简体中文版本

内容安全策略(CSP)

内容安全策略通过 HTTP 响应头限制页面可加载的脚本、样式、框架与网络连接,降低跨站脚本攻击的影响。

阅读英文原文

工作原理

内容安全策略是一组指令,例如 default-src、script-src、style-src、img-src 和 connect-src,每条指令列出允许的来源,default-src 作为兜底。nonce 或哈希可以放行特定内联脚本,而不必开放所有内联代码。frame-ancestors 控制谁可以嵌入本页,report-uri 或 report-to 收集违规报告。Content-Security-Policy-Report-Only 只观察而不拦截,适合上线前评估。

使用场景与权衡

所有渲染 HTML 的应用都应部署 CSP,尤其是展示用户生成内容或加载第三方脚本的页面。建议先用 report-only 收集违规,移除内联事件处理器与 eval,再正式启用。严格策略是抵御 XSS 的纵深防御,但无法修复服务端注入、授权错误,也无法阻止被明确放行的被污染依赖。严格策略会破坏内联事件、书签脚本和部分分析代码,迁移成本较高;unsafe-inline 在存在 nonce 或哈希时会被现代浏览器忽略,但旧浏览器行为不一致。

示例与误区

Content-Security-Policy: default-src 'self'; script-src 'self' 'nonce-r4nd0m'; object-src 'none'; base-uri 'self'; frame-ancestors 'none'

每次响应生成新的 nonce,并在允许的 script 标签上设置相同值。常见误区是认为加了 CSP 就无需输出编码;注入的 HTML 仍可能篡改页面或通过允许的通道外传数据。frame-ancestors 控制本页被谁嵌入,而不是本页可以加载哪些 iframe。相关概念包括 XSS、CORS 和供应链安全。