Extjs、Chrome扩展和内容安全策略
Extjs, Chrome Extension and Content Security Policy
我正在尝试用Ext JS 5.1.0开发一个Google Chrome扩展。
当我试图将ext-all.js添加到default_popup html中时,我发现Google chrome扩展不能再使用动态脚本评估技术,如eval()或new Function(),也不能将js代码字符串传递给将导致使用eval(()的函数,如setTimeout()。
因此,在设置过程中,googlechrome调试器返回以下错误:
拒绝将字符串求值为JavaScript,因为"unsafe eval"为不是以下内容安全中允许的脚本源策略指令:"script src'self'chrome扩展资源:"
ext-all-debug.js:8742 ext.ClassManager.ext.apply.getInstantiator
这是的错误代码
getInstantiator: function(length) {
var instantiators = this.instantiators,
instantiator, i, args;
instantiator = instantiators[length];
if (!instantiator) {
i = length;
args = [];
for (i = 0; i < length; i++) {
args.push('a[' + i + ']');
}
// The problem is here
instantiator = instantiators[length] = new Function('c','a','return new c(' + args.join(',') + ')');
instantiator.name = "Ext.create" + length;
}
return instantiator;
},
我找到了一个改变content_security_policy
的解决方案
"content_security_policy": "script-src 'self' 'unsafe-eval'; object-src 'self'"
将这一行添加到manifest.json
中允许使用动态脚本评估技术(但这很危险)。
所以,我想保留标准的谷歌铬安全权限。有没有办法解决这个问题?
您可以看看这里概述的sandbox
方法:使用Sencha Ext JS 构建应用程序
这是关于Chrome应用程序的,但原则仍然适用。您可以在清单中创建一个具有sandbox
属性的沙盒页面,将其嵌入到页面中,并使用postMessage
安全地与其通信。沙盒页面无法运行提升权限的Chrome API,这使得eval使用起来更安全。
同样,Chrome文档中有一篇命名恰当的文章:在Chrome扩展中使用eval。安全地
- 内容安全策略:页面's设置阻止加载资源
- 导致内容安全策略(CSP)冲突错误的本地jquery.js文件
- 旋转木马;启用内容安全策略时无法工作
- Extjs、Chrome扩展和内容安全策略
- 内容安全策略指令:;脚本src'self'blob:文件系统:chrome扩展资源:“;获取是否时
- 内容安全策略:无法在Chrome扩展中加载Google API
- 手动加载JQuery而不触发内容安全策略
- chrome扩展的内容安全策略问题
- WebGL CORS:试图突破用户代理的安全策略
- 在 JavaScript 中跟踪安全策略权限
- 如何打破内容安全策略
- 内容安全策略 + 表单插件
- 跨站点 XMLHttpRequest 内容安全策略指令解决方法
- Chrome 扩展程序“拒绝加载脚本,因为它违反了以下内容安全策略指令”
- 新标签页上动态URL的Chrome扩展安全策略
- 更新chrome扩展:manifest 2和安全策略
- 内容安全策略:无法在Chrome扩展中加载Mixpanel
- Mozilla扩展的内容安全策略
- 可以'由于安全策略的原因,不要使用Raphael JS在Chrome扩展弹出窗口中绘制路径
- 内容安全策略:无法't在Firebug中解析无效的源chrome扩展-FB脚本错误