最近,Facebook 等一些网站使用内容安全政策(CSP)限制从“不受信任的来源”加载脚本。例如,在请求 Facebook HTML 内容时(例如https://www.facebook.com),Facebook的HTTP响应包含以下响应标头:
x-webkit-csp:default-src *;script-src https://*.facebook.com http://*.facebook.com https://*.fbcdn.net http://*.fbcdn.net *.facebook.net *.google-analytics.com *.virtualearth.net *.google.com 127.0.0.1:* *.spotilocal.com:* chrome-extension://lifbcibllhkdhoafpjfnlhfpfgnpldfl 'unsafe-inline' 'unsafe-eval' https://*.akamaihd.net http://*.akamaihd.net;style-src * 'unsafe-inline';connect-src https://*.facebook.com http://*.facebook.com https://*.fbcdn.net http://*.fbcdn.net *.facebook.net *.spotilocal.com:* https://*.akamaihd.net ws://*.facebook.com:* http://*.akamaihd.net;
这会对一些需要从不受信任的来源加载和执行 Javascript 库的书签产生影响。
例如,每当我尝试运行显示锚点书签小工具在 Facebook 页面上,此书签小程序的执行失败,因为它尝试从不受信任的来源加载 jQuery。在 Chrome 的开发者控制台中,它会显示:
Refused to load the script 'http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js' because it violates the following Content Security Policy directive: "script-src https://*.facebook.com http://*.facebook.com https://*.fbcdn.net http://*.fbcdn.net *.facebook.net *.google-analytics.com *.virtualearth.net *.google.com 127.0.0.1:* *.spotilocal.com:* chrome-extension://lifbcibllhkdhoafpjfnlhfpfgnpldfl 'unsafe-inline' 'unsafe-eval' https://*.akamaihd.net http://*.akamaihd.net".
我找到了有关此主题的 Chrome 文档页面,但它仅适用于 Chrome扩展。
我正在寻找能够让我
- 一次性停用 CSP
- 或永久将我的可信来源列入白名单。
答案1
Chrome 应用认可的方法
使用模板库
使用提供预编译模板的库即可。您仍然可以使用不提供预编译的库,但这需要您做一些工作,并且存在限制。
您需要使用沙盒来隔离您想要执行“评估”操作的任何内容。沙盒会针对您指定的内容解除 CSP。
沙盒本地内容
沙盒允许在沙盒内的唯一来源中提供指定页面。这些页面将不受其内容安全策略的约束。沙盒内的页面可以使用 iframe、内联脚本和 eval()(后两者是被阻止的)。这将修复“unsafe-inline”和“unsafe-eval”。
- 在沙盒中使用内联脚本
- 在清单中包含沙盒
访问远程资源
您可以通过 XMLHttpRequest 获取远程资源,并通过 blob:、data: 或 filesystem: URL 提供这些资源。这应该可以解决 jQuery 获取问题。
清单要求
为了能够实现跨域XMLHttpRequests
,您需要为远程 URL 的主机添加权限。
跨域XMLHttpRequest
将远程 URL 提取到应用程序中并将其内容作为blob:
URL 提供。
我认为您无法做到这些。要修复unsafe-eval
和unsafe-inline
响应标头,只有脚本所有者才能修复代码,或者如果它在公共域中,您可以修复它。所有这些可能都是一次性修复。
黑客
不安全窗口
http://wiki.greasespot.net/UnsafeWindow
内容脚本注入
http://wiki.greasespot.net/Content_Script_Injection
然而,黑客行为也有弊端,因为至少第一次攻击肯定会造成安全漏洞。
答案2
您可以在内容选项卡中编辑这些设置,只需chrome://settings/content
在地址栏中输入即可直接访问。您可以在特定内容类型上将特定域列入白名单。