前端与浏览器 / 进阶

用 CSP 把 XSS 从一次失误变成多层防线

从 Report-Only 开始部署内容安全策略,使用 nonce、strict-dynamic 和 Trusted Types 降低脚本注入风险。

nonce 必须每次响应随机生成

服务端为每份 HTML 生成不可预测的 nonce,并同时写入响应头和可信 script 标签。nonce 不能是固定配置,也不应被不可信模板内容读取后复用。 strict-dynamic 允许带 nonce 的可信脚本加载后续脚本,适合现代打包应用。部署前要评估目标浏览器并保留合理降级来源。

EXAMPLE / 01CSP
Content-Security-Policy-Report-Only: default-src 'self'; script-src 'nonce-r4nd0m' 'strict-dynamic'; object-src 'none'; base-uri 'none'; frame-ancestors 'none'; report-to csp-endpoint

把实现拆成可验证的小块

nonce 必须按响应生成且不可预测

最后回到真实页面检查

CSP 是纵深防御,不替代安全编码