Seb*_*ber 18 security bookmarklet browser-extension google-chrome-extension content-security-policy
Github具有以下内容安全策略:
Content-Security-Policy:default-src*; script-src assets-cdn.github.com www.google-analytics.com collector-cdn.github.com; object-src assets-cdn.github.com; style-src'self''unsafe-inline''unsafe-eval'res assets-cdn.github.com; img-src'self'数据:assets-cdn.github.com identicons.github.com www.google-analytics.com collector.githubapp.com*.githubusercontent.com*.gravatar.com*.wp.com; media-src'un'; frame-src'self'render.githubusercontent.com www.youtube.com player.vimeo.com checkout.paypal.com; font-src assets-cdn.github.com; connect-src'self'ghconduit.com:25035 live.github.com uploads.github.com s3.amazonaws.com
我们可以使用Evernote或Pocket等服务的浏览器扩展来剪辑/检索网页内容.
在这个Github政策中,我没有看到Pocket或Evernote的任何引用.有人可以解释为什么Pocket扩展能够从Github检索内容,而Evernote扩展不是,有CSP错误)
CSP策略是否可以阻止加载bookmarklet应用程序或浏览器扩展应用程序(如剪辑器)?如果是这样,Pocket如何能够在任何内容上进行扩展工作?
我们的bookmarklets /扩展中有这个问题,我希望它们像Pocket扩展一样顺畅,但我真的不知道从哪里开始...谢谢
编辑:由于人们在评论中要求代码,我们的书签加载了这个javascript:
javascript: (function() {
function loadScript(a, b) {
var c = document.createElement('script');
c.type = 'text/javascript';
c.src = a;
var d = document.getElementsByTagName('head')[0],
done = false;
c.onload = c.onreadystatechange = function() {
if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) {
done = true;
b()
}
};
d.appendChild(c)
}
loadScript('http://localhostsss.com:9000/assets/js/backbone/views/clipping/clippinglocal.js', function() {
s.clipping.initClipping()
})
})()
Run Code Online (Sandbox Code Playgroud)
如果我尝试在具有CSP的Medium页面中启动此bookmarklet,则会出现以下错误.
拒绝加载脚本' http://localhostssss.com:9000/assets/js/backbone/views/clipping/clippinglocal.js ',因为它违反了以下内容安全策略指令:"script-src'unsafe-eval'' unsafe- inline'all:https:// .akamaihd.net http:// .baidu.com https://bitly.com https:// .cloudfront.net https:// .facebook.com https:// . facebook.net https://getpocket.com https:// .github.com https:// .googleapis.com https://ssl.google-analytics.com https://app.greenhouse.io https:// .medium.com https://myspace.com https:// .pinterest.com https://www.readability.com https://thinkery.me https://this.cm https:// .twitter.com https://use.typekit.net https://*.instapaper.com'self'".
有人可以告诉我如何在像Medium或Github这样有CSP策略的网站上加载我们的书签.
我还不能谈论浏览器扩展,因为我还没有开始工作,而且这个人不在这里.我只知道我们有同样的问题,我们的浏览器扩展基本上与我们的bookmarklet相同的代码,除了它有点适合浏览器扩展shell.如果您只能回答书签案例我会好的并接受答案,但任何浏览器扩展的提示都会很好:)
DG.*_*DG. 17
CSP策略是否可以阻止加载bookmarklet应用程序或浏览器扩展应用程序(如剪辑器)?
它非常简单:如果扩展名或bookmarklet违反了CSP,它将被阻止.
因此,如果CSP阻止所有内联脚本,则不会有书签.Github这样做是media-src因为,简单地说,"media-src"指令默认阻止内联脚本.因此,没有书签可以在Github上运行.
(作为旁注,尽管所有浏览器都以这种方式工作,但这并不是标准所说的那样.书签实际上应该免除CSP,但遗憾的是没有浏览器不愿意允许这样做.)
现在,至于哪些扩展将起作用或不起作用,这取决于扩展本身的工作方式.CSP不能直接阻止扩展,但是,如果扩展尝试执行任何违反CSP的操作,则可能会失败.因此,在Github上,如果扩展尝试将本机脚本添加到页面的DOM中,或者尝试将外部脚本从未批准的位置附加到页面的DOM,或者执行CSP中描述的任何其他受限制的事情,则可能会失败.
那么,Evernote扩展的哪一部分导致了CSP错误,Pocket如何在不造成错误的情况下完成类似的工作呢?我不知道.这一切都取决于如何编写这些应用程序的具体细节.最有可能的是,查看他们的代码并尝试弄清楚它是非常简单的.据我所知,所有Chrome扩展程序都是用JavaScript编写的,并打包为zip文件 - 只是使用不同的文件扩展名.我相信Firefox插件也是如此.
| 归档时间: |
|
| 查看次数: |
4168 次 |
| 最近记录: |