繁体   English   中英

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

[英]content security policy issue with chrome extension

尝试通过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)
}

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

拒绝从'data:application / pdf; base64,JVBERi0xLjQNCiXi48 / TDQoxIDAgb2JqDQo8PA0KL1R5cGU ... mRvYmoNCjkgMCBvYmoNCjw8DQovVHlwZSAvRm9udA0KL1N1YnR5cGUgL1R5cGUxDQovQmFzZUZ'加载插件数据,因为它违反了以下内容安全策略指令:“default-src'self'

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

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

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

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

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

根据Chrome扩展程序的内容安全政策的文档,

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

放松extemsion的CSP以接受PDF是不可能的。
但是 ......

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM