本地测试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
相关产品推荐
相关产品推荐

