Chrome扩展的内容安全策略问题
尝试通过Chrome浏览器扩展应用程序中的JavaScript在“iframe”中加载不同的内容(可以是pdf,swf等)。 内容使用数据URL方案加载为:
//这个javascript被注册在html文件中,并且LoadFunction是在点击按钮的DOMContentLoaded事件内注册的。
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的‘自我’
但令人惊讶的是,当数据url更改为'data:image / png; base64'+'base64编码数据'时,不会引发此错误。 并且图像成功加载到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扩展程序内容安全政策的文档,
请注意,脚本src和object-src都是由策略定义的。 Chrome将不会接受不会将这些值限制为(至少)“自我”的政策。
不可能放宽您的Extemsion的CSP接受PDF。
但是 ...
您可以定义沙箱扩展资源,即扩展中不受扩展CSP影响的页面。 同时,该页面将失去对Chrome扩展程序API的访问权限,以防止网页中的安全漏洞。 如果您希望在扩展程序和沙盒页面之间进行通信,请使用postMessage
- 例如Chrome扩展中的使用eval。 安全..