20

Mozilla CSPは、デフォルトでブックマークからJavascriptを実行することをブロックしますか?

そうするように構成できますか?

4

4 に答える 4

21

2017年の時点で、この回答が2011年に最初に投稿されたときと同じように、回答は依然として決定的な「おそらく」です。仕様には明確に次のように記載されています。

リソースに適用されるポリシーは、アドオン、拡張機能、ブックマークレットなどのユーザー エージェント機能の操作に干渉すべきではありません。

そして、これは実際に Chrome 61 で見られる動作です。ブックマークレットはhttps://addons.mozilla.org/で実行されますscript-src: 'unsafe-inline'。しかし、Firefox 56 ではブックマークレットはこの Web サイトで実行されず、CSP 違反が報告されています。

Firefoxのバグ レポートには、この問題に関する非常に長い議論があり、特にW3C 仕様に関する同様の議論へのリンクがあります。そのため、現時点では、ブックマークレットが CSP の影響を受けないことを信頼することはできません。いつでも CSP を完全に無効にすることができますが、それは重要な保護レイヤーが 1 つ少なくなります。

于 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 スタイルシートに挿入することで、この制限を回避できます。

外部 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 に答える