chrome扩展名的内容安全政策问题

时间:2013-12-06 12:17:44

标签: javascript google-chrome google-chrome-extension content-security-policy

尝试通过Chrome扩展应用程序中的javascript在'iframe'中加载不同的内容(可以是pdf,swf等)。使用数据URL方案加载内容:

//这个javascript在html文件中注册,只需点击一个按钮就可以在DOMContentLoaded事件中注册LoadFunction。

void LoadFunction()
{
window.parent.document.getElementById("page_data").src = 'data:application/pdf;base64,'    + 'base64 encoded data'; (base64 data is received from a c++ class)
}

但是一旦调用上述函数,内容安全策略错误就会引发:

拒绝从加载插件数据 '的数据:应用程序/ PDF格式; BASE64,JVBERi0xLjQNCiXi48 / TDQoxIDAgb2JqDQo8PA0KL1R5cGU ... mRvYmoNCjkgMCBvYmoNCjw8DQovVHlwZSAvRm9udA0KL1N1YnR5cGUgL1R5cGUxDQovQmFzZUZ',因为它违反了以下内容安全政策指令:“默认-SRC '自我'

但令人惊讶的是,当数据网址更改为:'data:image / png; base64,'+'base64 encoded data'时,不会引发此错误;并且图像成功加载到iframe中。

据我所知,只有当内联代码直接执行到html文件中时才会引发此错误,但这不是这种情况,如果是这种情况,那么为什么不会为图像文件引发它。

此外,如果我尝试将manifest.json文件中的内容安全策略设置为: “content_security_policy”:“script-src'self'; object-src'self'; frame-src'self'数据:”

然后错误变为: 拒绝从'data:application / pdf; base64'加载插件数据,因为它违反了以下内容安全策略指令:“object-src'self'

所以可能需要设置object-src,但不确定它应该是什么。

1 个答案:

答案 0 :(得分:0)

根据Chrome扩展程序Content Security Policy的文档,

  

请注意,script-src和object-src都是由策略定义的。 Chrome不会接受不会将这些值限制为(至少)“自我”的政策。

放弃extemsion的CSP以接受PDF是不可能的 的然而 ...

您可以定义sandboxed extension resource,即您的扩展程序中不受扩展程序CSP影响的页面。同时,该页面将无法访问Chrome扩展程序API,以防止页面中出现安全漏洞。如果您希望在扩展程序和沙盒页面之间进行通信,请使用postMessage - 例如如Using eval in Chrome Extensions. Safely.所示。