当前位置:首页 > 文章列表 > 文章 > 前端 > 设置CSP的script-src指令可有效限制HTML中可执行脚本的来源域名,具体方法如下:在HTTP响应头中添加Content-Security-Policy 在服务器配置(如Nginx、Apache)或后端代码中,设置响应头:Content-Security-Policy: script-src 'self' https://trusted-domain.com;'self' 表示允许当前域名

设置CSP的script-src指令可有效限制HTML中可执行脚本的来源域名,具体方法如下:在HTTP响应头中添加Content-Security-Policy 在服务器配置(如Nginx、Apache)或后端代码中,设置响应头:Content-Security-Policy: script-src 'self' https://trusted-domain.com;'self' 表示允许当前域名

2026-05-26 14:18:33 0浏览 收藏
CSP的script-src指令是前端安全防护的关键一环,通过精准配置域名白名单(如'self'和可信CDN)能有效阻止恶意脚本执行,但其语法极其严格——单引号包裹、空格分隔、不支持通配符或路径,写错一个字符就可能导致页面白屏;内联脚本和eval默认被禁,需用nonce或哈希替代而非妥协启用'unsafe-inline';优先采用HTTP响应头而非meta标签配置,并务必通过Report-Only模式灰度验证,否则漏掉一个第三方SDK就可能让核心功能静默失效——这不是理论风险,而是无数线上事故的真实写照。

如何在HTML中通过CSP的script-src指令限制可执行脚本来源域名

直接用 script-src 指令就能精准控制哪些域名的脚本可执行,但写错一个引号或漏掉 'self' 就会导致整个页面白屏——这不是夸张,是真实发生的高频事故。

script-src 域名白名单怎么写才不崩溃

核心原则:只列出你真正需要的来源,且每个来源必须用单引号包裹、空格分隔。浏览器会严格按字面匹配,不支持通配符(如 *.cdn.com)或子路径(如 https://api.example.com/v1)。

  • 'self' 必须显式写出,它代表当前页面协议+域名+端口,不是“默认开启”
  • HTTPS 域名要带完整协议,https://cdn.example.comhttp://cdn.example.com 视为两个不同源
  • 不允许写裸域名(如 cdn.example.com),也不允许写带路径的 URL(如 https://cdn.example.com/js/
  • 如果用了 data:blob: 等特殊协议,也得单独加进去,例如 data: blob:

正确示例:Content-Security-Policy: script-src 'self' https://cdn.jsdelivr.net https://unpkg.com

为什么内联脚本和 eval 会突然失效

因为只要没显式加上 'unsafe-inline''unsafe-eval'script-src 默认就禁用它们——这是 CSP 的安全基线,不是 bug。

  • 这类内联脚本会被拦截,控制台报错 Refused to execute inline script
  • onclick="doSomething()"javascript:void(0) 等事件处理器和伪协议也会被阻止
  • eval()setTimeout("...")new Function(...) 全部失效,报错 Refused to evaluate a string as JavaScript

想保留某段内联脚本?别加 'unsafe-inline',改用 nonce 或哈希:script-src 'self' 'nonce-abc123',然后在对应