如何仅禁用书签的Firefox中的CSP?


26

今天,我注意到由于内容安全策略(CSP)的限制,我无法在https://github.com/上运行小书签。有没有一种方法可以仅禁用bookmarklet,而不禁用其他所有功能,而禁用Firefox中的CSP?

我注意到中的security.csp.enable选项about:config,但这将完全禁用CSP。激活书签时,将以下消息记录到控制台:

Timestamp: 04/22/2013 02:39:05 PM
Warning: CSP WARN:  Directive inline script base restriction violated

Source File: https://github.com/
Line: 0
Source Code:
javascript:...

Answers:


8

您可以尝试将您的小书签转换为GreaseMonkey用户脚本。它们在特权环境中运行,并且不受CSP的约束。

但是,用户脚本和书签的意图当然是不同的-在按需书签时,用户脚本会自动运行。您可以通过<button>在用户脚本中创建一个,将其附加到页面上以及onclick在该按钮上设置一个事件侦听器来触发小书签的代码来规避此问题。

代码应如下所示:

// ==UserScript==
// @name            Name
// @description     Description
// @version         0.1
// @namespace       example.Lekensteyn
// @grant           none
// @include         http*://github.com/*/*/commit/*
// ==/UserScript==

var myBookmarklet = function () {
    // here goes the code of the bookmarklet
};

var newButton = document.createElement('button');
newButton.innerHTML = 'Execute my bookmarklet';

newButton.addEventListener('click', function(evt) {
    myBookmarklet();
});

document.getElementById('someElement').appendChild(newButton);

几乎从我的用户脚本中获取,该用户脚本也以GitHub为目标。您可以使用debugger;脚本中的关键字在Firebug中调试用户脚本。

但是请注意,Firebug本身现在也要受CSP的约束,因此您不能例如在控制台中执行代码(但是您可以在“只读”模式下检查用户脚本)。此错误已得到解决


1
点播功能是非常重要的。我有一个可以插入快速评估文本区域的书签,其中一些功能无法填充页面的大部分,一个功能可以为当前页面创建QR码,而其他一些较小的部分。这些不是特定于GH的。小书签的功能在于可以非常轻松地创建和删除它们。GreaseMonkey已经安装,但这并不能解决CSP问题。感谢您的建议,也许Firebug的解决方案也将对bookmarklet有所帮助。
Lekensteyn

4
不幸的是,Firebug修复程序只能修复Firebug本身。来自CSP的Github博客文章正如CSP规范所明确指出的那样,浏览器小书签不应受到CSP的影响。(..)但是,没有一个浏览器能正确地做到这一点。所有这些都会导致违反CSP并阻止小书签运行。也许您应该更彻底地调查此案,并在Bugzilla上报告问题。
jakub.g 2013年

2
顺便说一句,您可以使用GM_registerMenuCommand按需进行函数调用。别忘了@grant GM_registerMenuCommand。它将添加到Greasemonkey菜单中的条目,可在下访问(GM logo) > User Script Command...。这样,您可以轻松地将小书签转换为用户脚本。
jakub.g 2013年

我不明白...在页面上创建一个按钮以在单击时加载代码不起作用,但仍会引发CSP异常
Michael

7

Github说它应该按照规范工作,但是没有浏览器能正确实现:

https://github.com/blog/1477-content-security-policy#bookmarklets

您应该为此问题打开自己喜欢的浏览器的错误,或对其投票:


2
记录在案,还有另一个专门针对基本书签功能的Firefox错误(不太可能在讨论中陷入困境):bugzilla.mozilla.org/show_bug.cgi?
id=1478037

为了节省其他用户的点击次数,@ djpohly在上面的注释中提到的错误1478037是关于允许书签在不加载外部资源的情况下运行。
waldyrious

1

许多答案都建议使用用户脚本(例如TamperMonkey或GreaseMonkey),但我想记住,这些扩展名将某些页面列入了黑名单。(当然,您可以覆盖黑名单,但是开发人员出于安全考虑,将这些页面锁定了)。

例如,我想使用书签来从任何亚马逊列表中快速进入ReviewMeta,但是亚马逊阻止了不安全的脚本源(更新:它没有被阻止,但是我没有脚本,这很可惜)。默认情况下,在银行和购物网站上将用户脚本扩展名列入黑名单,以防止恶意用户脚本的安装/使用。

(PS本身并不是一个答案,但我认为在着手使用用户脚本之前只是将其列入黑名单并避免将其列入黑名单之前,记住这一点将很有用。)



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.