内容安全策略是否阻止书签?
截至2017年,答案仍然是明确的:“也许” - 就在这个答案最初发布于2011年像的specification明确表示:
政策执行上的资源不应该与干扰用户代理功能(如插件,扩展或书签)的操作。
而且这确实是我在Chrome 61看到的行为:一个书签将在https://addons.mozilla.org/运行,有没有script-src: 'unsafe-inline'
严格的内容安全策略的站点。然而,在Firefox 56书签将不会运行在这个网站上,并且正在报告CSP违规。
在Firefox bug report中对此问题有很长的讨论,特别是链接到similar discussion on the W3C spec。因此,截至目前,您不能真正依赖书签小程序不受CSP影响。你总是可以禁用CSP,但这对你来说是一个重要的保护层。
感谢您对此进行测试!但是如果你愿意,你可以简单地切换CSP。打开about:config并将“security.csp.enable”设置为“false”。所以你无论如何都可以运行你自己的小册子。 – PiTheNumber
@PiTheNumber:我的答案已经表明你可以关闭CSP,并建议不要这样做。 –
对不起,我在撰写评论时看不到您的编辑。 – PiTheNumber
该行为在mozillas wiki中指定。
CSP不应干扰用户提供的脚本(如浏览器加载项和书签)的操作。
看一看这里: https://wiki.mozilla.org/Security/CSP/Specification#Non-Normative_Client-Side_Considerations
是,在Mozilla Firefox的CSP块的bookmarklet。有一个bug about it。
但是,您可以通过注入JS代码到外部CSS样式表,就像我Top News Feed bookmarklet绕开这个限制作用:
外部CSS:
#topnewsfeed { font-family: '(function(){/*payload*/})()'; }
小书签JS:
(function() {
var a = document.createElement("link");
a.rel = "stylesheet";
a.href = "//niutech.github.io/topnewsfeed/topnewsfeed.css";
a.onload = function() {
var a = b.currentStyle ? b.currentStyle.fontFamily : document.defaultView.getComputedStyle(b, null).fontFamily;
eval(a.replace(/^["']|\\|["']$/g, ""));
};
document.body.appendChild(a);
var b = document.createElement("div");
b.id = "topnewsfeed";
document.body.appendChild(b);
})()
bookmarklet加载一个包含JS代码的CSS文件,添加一个由此CSS设计的元素,读取元素样式属性和eval
的代码。
'拒绝加载样式表'https://
我已经使用Greasemonkey userscript(在Firefox中)为此问题创建了解决方法“修复”。现在,您可以在所有CSP和https://网站上拥有小书签,并且可以将书签放在一个漂亮,易于编辑的库文件中,而不是单独挤压成书签。
请参阅:https://groups.google.com/d/msg/greasemonkey-users/mw61Ynw5ORc/Gl_BNUhtSq0J
此方法不起作用,因为书签不能执行(bookmarklet ='unsafe-inline') – mems
只是好奇心,为什么要禁用bookmarklets? – ThiefMaster
我不只是担心其他人可能会这样做,因为他们不希望在网页上注入Javascript。 – PiTheNumber
总有像greasemonkey的东西。如果**用户**决定他想在只会影响自己的网站上注入javascript,那么阻止他这样做是没有什么权利的。 – ThiefMaster