20

默认情况下, Mozillas CSP是否会阻止从书签执行Javascript

可以这样配置吗?

4

4 回答 4

21

截至 2017 年,答案仍然是一个明确的“也许”——就像这个答案最初于 2011 年发布时一样。规范明确表示:

对资源强制执行的策略不应干扰用户代理功能的操作,如插件、扩展或书签。

这确实是我在 Chrome 61 中看到的行为:书签将在https://addons.mozilla.org/上运行,该站点具有严格的内容安全策略,没有script-src: 'unsafe-inline'. 然而,在 Firefox 56 中,书签不会在该网站上运行,并且正在报告 CSP 违规。

在Firefox 错误报告中对此问题进行了很长时间的讨论,特别是链接到W3C 规范的类似讨论。所以到目前为止,您不能真正依赖不受 CSP 影响的书签。您始终可以完全禁用 CSP,但这对您来说是一个重要的保护层。

于 2011-09-30T08:25:36.310 回答
5

该行为在 mozillas wiki 中指定。

CSP 不应干扰用户提供的脚本(例如浏览器插件和书签)的操作。

看看这里: https ://wiki.mozilla.org/Security/CSP/Specification#Non-Normative_Client-Side_Considerations

于 2012-12-03T21:07:37.550 回答
4

是的,CSP 会阻止 Mozilla Firefox 中的小书签。有一个关于它的错误

但是,您可以通过将 JS 代码注入外部 CSS 样式表来绕过此限制,就像我的Top News Feed 小书签一样:

外部 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);
})()

小书签加载一个包含 JS 代码的 CSS 文件,添加一个由该 CSS 设置样式的元素,读取元素样式属性和eval代码。

于 2014-08-09T23:30:48.947 回答
0

我使用 Greasemonkey 用户脚本(在 Firefox 中)为这个问题创建了一个解决方法“修复”。您现在可以在所有 CSP 和 https:// 网站上拥有小书签,并且将小书签放在一个漂亮、易于编辑的库文件中,而不是单独压缩到书签中。

请参阅:https ://groups.google.com/d/msg/greasemonkey-users/mw61Ynw5ORc/Gl_BNUhtSq0J

于 2015-05-09T04:37:19.287 回答