content_security_policy未在Chrome扩展程序

时间:2016-03-13 09:33:08

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

Zemanta Chrome Extension无法加载,并显示以下错误消息

loader.js:13 Refused to load the script 'https://static.zemanta.com/widgets/blogger.com/merged-blogger.js?v=1451290656'
because it violates the following Content Security Policy directive: 
"script-src 'self' *.google.com *.google-analytics.com 'unsafe-inline'  
'unsafe-eval' *.gstatic.com *.googlesyndication.com *.blogger.com   
*.googleapis.com uds.googleusercontent.com https://s.ytimg.com   
www-onepick-opensocial.googleusercontent.com   www-bloggervideo-opensocial.googleusercontent.com   
www-blogger-opensocial.googleusercontent.com *.blogspot.com   https://www.blogblog.com".

我已将content_securiy_policy行更改为以下内容,然后重新加载扩展程序

"content_security_policy": "script-src 'self' https://ssl.google-analytics.com https://*.zemanta.com; object-src 'self'"

为什么"https://*.zemanta.com"未在上面的错误消息中的CSP指令中列出,以及如何确保它在CSP中?

1 个答案:

答案 0 :(得分:1)

它看起来像是一个网页引发的错误,它有自己的CSP,而不是你的扩展程序。所以你设置的CSP没有效果。

这可能是由于内容脚本试图将<script src="...">插入页面而导致的。这取决于页面的CSP,可能会失败。

您可以尝试使用XHR加载脚本并插入包含代码而不是<script>链接的src标记来bypass the page's CSP。请注意,这可能会在稍后阶段失败,因为虽然脚本将以这种方式执行,但它将在自己的操作中受CSP约束(因此,如果它也尝试添加<script>标记,它会失败)。

或者,您可以使用webRequest API拦截和修改CSP标头。这是有风险的,因为你通常会放松页面的安全性。