CSP是一种浏览器强制执行的白名单式安全策略,通过HTTP头或meta标签限制资源加载以防止XSS。需禁用内联脚本与eval、改用事件监听、显式声明第三方域名,并配合服务端转义等其他防护措施。
JavaScript CSP(Content Security Policy,内容安全策略)是一种浏览器安全机制,用来限制网页中可以加载和执行的资源,核心目标是防止跨站脚本攻击(XSS)。它不依赖代码层的过滤或转义逻辑,而是通过 HTTP 响应头或 标签,由浏览器强制执行“白名单式”资源控制。
CSP 是一套声明式的规则,告诉浏览器哪些脚本、样式、图片、iframe、字体等资源允许加载,哪些不允许。例如,禁止内联脚本()和 eval(),只允许从指定域名加载外部 JS 文件。
典型响应头示例:
Content-Security-Policy: script-src 'self' https://cdn.example.com; object-src 'none'; base-uri 'self';)、、,防止 Flash/Java 类型的旧式攻击单纯加个 CSP 头不够,必须配合开发习惯调整。重点在于切断 XSS 的常见执行路径:
→ 改用 JS 绑定 addEventListener
改成通过 data- 属性或 API 接口传数据eval()、setTimeout(string)、setInterval(string)、Function(string) 等动态代码执行方式JSON.parse() 而非 eval(),服务端返回时确保 Content-Type 为 application/json
不要一步到位启用严格策略,先用 Content-Security-Policy-Report-Only 头收集违规行为:
/csp-report 发送 JSON 报告,帮你发现遗漏的合法资源https://*.google.com)或宽泛协议(http:)'unsafe-eval' —— Vue/React 的模板编译、Webpack 的 eval devtool 都可能触发它,生产环境应关闭CSP 主要防“执行”,不防“注入”。仍需坚持基础防护:
dangerouslySetInnerHTML 或 v-html 这类绕过接口HttpOnly + Secure Cookie,防止 XSS 窃取 sessionX-XSS-Protection: 0(现代浏览器已弃用,可忽略)和 X-Content-Type-Options: nosniff 增强防护纵深基本上就这些。CSP 是 XSS 防御的关键一环,但必须和其他措施配合,且需要适配前端工程实践。不复杂,但容易忽略细节。