为什么我的CSP策略阻止了eval函数,但移除unsafe-eval又报错?

司徒心虹 阅读 18

我在开发动态表单组件时用到了eval执行表达式,CSP报错提示缺少unsafe-eval。尝试在header里加了script-src 'self' 'unsafe-eval',但控制台还是显示:

Content-Security-Policy: script-src 'self' 'unsafe-eval'

更奇怪的是,如果完全移除unsafe-eval,页面直接崩溃报Uncaught DOMException: Blocked a frame with origin from evaluating a string as JavaScript because the value of the keyword。我已经检查过第三方库没用eval,这是怎么回事?

我来解答 赞 6 收藏
二维码
手机扫码查看
1 条解答
ლ梦鑫
ლ梦鑫 Lv1
应该是你的 CSP 头被覆盖了或者有多个 CSP 规则在生效。检查 HTTP 响应头是否真的只设置了一条 Content-Security-Policy,并且确认没有 meta 标签或其他中间件注入了更严格的策略。

用这个完整 header 测试:

Content-Security-Policy: script-src 'self' 'unsafe-eval'; object-src 'none';


同时确保浏览器没缓存旧策略,清缓存后重试。但强烈建议替换 eval,用 Function 构造函数或 JS 表达式解析器(比如 mathjs)更安全。
点赞 1
2026-02-11 02:01