出于安全考虑,我已从我的CSP标头中删除了script-src: 'unsafe-eval'
。我注意到这已经破坏了Google Charts。图表现在无法呈现并显示错误:
Invalid JSON string: {}
任何想法或谷歌只是吹嘘它并允许他们的图书馆中的不安全评估?我的地图遇到了同样的问题,不得不使用不同的库。
答案 0 :(得分:8)
Google Visualization确实在内部使用eval()
目前Google Visualization API正在使用:
1.核心图表上的评估.I.js(3次)
2.评估jsapi
摘自here,关于GV和Chrome App Manifest v2兼容性的错误报告,大约1个月。 Google Visualization本身不符合Manifest V2的规则:
您的代码或库是否使用eval(),new Function(),innerHTML, setTimeout(),或以其他方式传递JS代码的字符串 动态评估?
- 如果要将JSON代码解析为对象,请使用JSON.parse()。
- 使用CSP友好的库,例如AngularJS。
- 在清单中创建沙箱条目并在沙箱中运行受影响的代码,使用postMessage()与沙盒进行通信 页。
醇>
所以google自己非常清楚这个问题。
我的印象是,由于浏览器的兼容性,GV内部使用的是eval(jsonString)
而不是JSON.parse()
。在IE8之前,{3.1}等之前JSON.parse()
不可用(见compatibility list),这就是为什么在阻止eval()
时出现无效的JSON错误的原因。
由于这也会影响GV遵守Manifest规则的方式,我猜这个问题很快就会消失。