如何消除内容安全策略(CSP)中的'unsafe-eval'错误?
解决NodeJS后端CSP配置中WebAssembly 'unsafe-eval'报错问题
你遇到的问题根源是CSP配置的语法错误,导致script-src的unsafe-eval等规则没有被正确识别,服务器依然只应用了script-src 'self'的限制,所以WebAssembly模块无法被编译实例化。
错误配置的问题点
你的代码里,script-src的写法不符合对象语法规范:
csp.extend(app, { policy: { directives: { 'default-src': ['self'], 'style-src': ['self', 'unsafe-inline', 'https:'], 'font-src': ['self', 'https://fonts.gstatic.com'], 'script-src': 'self', // 此处单独赋值'self' 'unsafe-inline', // 这几项变成独立属性,不属于script-src的配置项 'unsafe-eval', 'data', 'blob', 'ws://localhost:56558/', }, }, });
这种写法会让unsafe-inline、unsafe-eval等成为directives对象下的单独属性,而非script-src的子项,所以CSP规则里的script-src实际上只有'self'。
修正后的配置
把script-src的所有源放在一个数组中,确保语法正确:
csp.extend(app, { policy: { directives: { 'default-src': ['self'], 'style-src': ['self', 'unsafe-inline', 'https:'], 'font-src': ['self', 'https://fonts.gstatic.com'], 'script-src': [ 'self', 'unsafe-inline', 'unsafe-eval', 'data:', 'blob:', 'ws://localhost:56558/' ] }, }, });
注意:data和blob需要加上冒号(data:、blob:),否则CSP可能无法正确识别这些源类型。
额外验证点
- 重启本地服务器,确保新的CSP配置生效
- 检查浏览器控制台的CSP报告,确认
script-src规则已经包含unsafe-eval
内容的提问来源于stack exchange,提问作者Favour Oghenekowho
相关产品推荐
相关产品推荐

