You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地测试CSP:如何配置为允许所有资源仅阻止unsafe-eval

问题判定

你遇到的EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive:报错,就是CSP规则拦截字符串动态执行逻辑直接触发的。本地无法复现是因为本地开发服务(Vite、Webpack Dev Server这类)默认不会启用严格CSP限制,和上层部署环境的响应头策略不一致,属于部署环境特有的问题。

测试用CSP配置(仅拦截unsafe-eval,其余资源全放通)

你之前配置meta标签时误拦截业务依赖,本质是CSP指令没配全,漏了部分资源类型的放通规则。直接用下面这组meta配置即可满足测试要求,不会拦截任何正常业务资源加载、内联代码执行、跨域请求:

<meta http-equiv="Content-Security-Policy" content="
  default-src * 'unsafe-inline' data: blob:;
  script-src * 'unsafe-inline' data: blob:;
  style-src * 'unsafe-inline' data: blob:;
  img-src * data: blob:;
  connect-src * data: blob:;
  font-src * data: blob:;
  frame-src * data: blob:;
  object-src 'none';
  base-uri *;
">

这组配置刻意没有在脚本相关指令里添加'unsafe-eval'标记,所有非eval类的资源加载、代码执行逻辑都会正常放行,唯一的限制就是禁止eval()、new Function()、传入字符串参数的setTimeout/setInterval这类动态字符串转代码的执行行为,完全匹配你的测试场景。

配置注意事项
  • 配置时不要在script-src或default-src字段里误加'unsafe-eval',否则会直接放开eval限制,无法复现上层环境的报错
  • 如果插入这组meta标签后依然出现业务依赖被拦截的情况,先打开浏览器开发者工具的网络面板,查看页面响应头:如果上层部署环境已经在HTTP响应头里返回了更严格的CSP规则,页面内meta标签配置的CSP无法覆盖响应头规则,这种情况需要联系部署侧临时调整响应头的CSP参数做测试,修改本地index.html无效
  • 这组配置仅用于问题定位测试,正式环境禁止直接使用。确认报错根因后,需要排查具体是哪个业务依赖使用了eval逻辑,优先替换为无eval依赖的版本,评估安全风险后再决定正式CSP规则是否需要放开unsafe-eval权限。

内容的提问来源于stack exchange,提问作者Timbo773

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 01:21:41