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?
- Use JSON.parse() if you’re parsing JSON code into an object.
- Use a CSP-friendly library, for example, AngularJS.
- 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 规则,我想这个问题很快就会消失。
出于安全考虑,我已从我的 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?
- Use JSON.parse() if you’re parsing JSON code into an object.
- Use a CSP-friendly library, for example, AngularJS.
- 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 规则,我想这个问题很快就会消失。