ブックマークレットだけでFirefoxでCSPを無効にする方法は?


26

今日、コンテンツセキュリティポリシー(CSP)の制限により、https://github.com/でブックマークレットを実行できないことに気付きました。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:...

回答:


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コードを作成するための機能の1つで、ページの大部分を埋めない機能を備えた簡単なeval-textareaを挿入するブックマークレットがあります。これらはGH固有ではありません。ブックマークレットの利点は、ブックマークレットを簡単に作成および削除できることです。GreaseMonkeyはすでにインストールされていますが、CSPの問題は解決しません。提案のおかげで、おそらくFirebugのソリューションはブックマークレットにも役立つでしょう。
-Lekensteyn

4
残念ながら、Firebugの修正はFirebug自体のみを修正します。CSPのGithubブログエントリから:CSP仕様で明らかにされているように、ブラウザーのブックマークレットはCSPの影響を受けません。(..)しかし、どのブラウザもこれを正しくしていません。すべてがCSP違反を引き起こし、ブックマークレットが機能しなくなります。おそらく、ケースをより徹底的に調査し、Bugzillaで問題を報告する必要があります。
jakub.g

2
ところで、GM_registerMenuCommandを使用して、オンデマンドで関数呼び出しを行うことができます。忘れないで@grant GM_registerMenuCommand。Greasemonkeyメニューにエントリを追加します(GM logo) > User Script Command...。これにより、ブックマークレットをユーザースクリプトに簡単に変換できます。
jakub.g

わからない...クリックしたときにコードをロードするボタンをページ上に作成しても機能しない。それでもCSP例外がスローされる
Michael

7

Githubによると、仕様どおりに動作するはずですが、ブラウザは正しく動作しません。

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

この問題に対してお気に入りのブラウザのバグを開くか、投票してください。


2
記録のために、基本的なブックマークレット機能専用の別のFirefoxのバグがあります(議論で
行き詰まる

他の人のクリックを節約するために、上記のコメントで@djpohlyが言及したバグ1478037は、外部リソースをロードしない限りブックマークレットの実行を許可することに関するものです。
ウォルディリアス

1

多くの回答がユーザースクリプト(TamperMonkeyやGreaseMonkeyなど)を推奨していますが、これらの拡張機能によって何らかの理由でブラックリストに登録されているページがあることを覚えておきたいと思います。(もちろん、ブラックリストを上書きできますが、開発者はセキュリティを念頭に置いてこれらのページをロックアウトしました)。

たとえば、ブックマークレットを使用してAmazonのリストからReviewMetaにすばやく移動したかったのですが、Amazonは安全でないスクリプトソースをブロックしました(更新:ブロックされませんでしたが、スクリプトがありませんでした、残念です)。ユーザースクリプト拡張機能は、悪意のあるユーザースクリプトのインストール/使用を防ぐために、デフォルトで銀行およびショッピングサイトでブラックリストに登録されています。

(PSこれ自体は答えではありませんが、ページをブラックリストに載せてブラックリストから外すことをためらうために、ユーザースクリプトを手に入れる前にこれを覚えておくことは有益だと思いました。)


0

Greasemonkeyユーザースクリプト(Firefox)を使用して、この問題の回避策「修正」を作成しました。すべてのCSPおよびhttps://サイトにブックマークレットを追加できるようになりました。さらに、ブックマークレットを個別にブックマークに追加する代わりに、簡単に編集できる素敵なライブラリファイルにブックマークレットを追加できます。

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


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.