Google 图表 unsafe-eval

Google Charts unsafe-eval

出于安全考虑,我已从我的 CSP headers 中删除了 script-src: 'unsafe-eval'。我注意到这现在打破了 Google 图表。图表现在无法呈现并显示错误:

Invalid JSON string: {}

有什么想法,或者 Google 只是吹嘘它并允许 unsafe-eval 在他们的库中?我在他们的地图上遇到了同样的问题,不得不使用不同的图书馆。

Google 可视化确实在内部使用 eval()

Currently Google Visualization API is using:
1. eval on corechart.I.js (3 times)
2. eval on jsapi

摘自 here, a bug report regarding GV and Chrome App Manifest v2 compatibility, about 1 month old. Google Visualization does not itself complies with the rules of Manifest V2 :

Is your code or library using eval(), new Function(), innerHTML, setTimeout(), or otherwise passing strings of JS code that are dynamically evaluated?

  1. Use JSON.parse() if you’re parsing JSON code into an object.
  2. Use a CSP-friendly library, for example, AngularJS.
  3. Create a sandbox entry in your manifest and run the affected code in the sandbox, using postMessage() to communicate with the sandboxed page.

所以 google 他们自己也很清楚这个问题。

我的印象是,由于浏览器兼容性,GV 内部使用 eval(jsonString) 而不是 JSON.parse()JSON.parse() 在 IE8 之前不可用,在 FF 3.1 之前等等(参见 compatibility list),这就是为什么当你阻止 eval() 时你会得到无效的 JSON 错误。

因为这也会影响 GV 如何遵守 Manifest 规则,我想这个问题很快就会消失。