Mozilla CSPは、デフォルトでブックマークからJavascriptを実行することをブロックしますか?
そうするように構成できますか?
Mozilla CSPは、デフォルトでブックマークからJavascriptを実行することをブロックしますか?
そうするように構成できますか?
2017年の時点で、この回答が2011年に最初に投稿されたときと同じように、回答は依然として決定的な「おそらく」です。仕様には明確に次のように記載されています。
リソースに適用されるポリシーは、アドオン、拡張機能、ブックマークレットなどのユーザー エージェント機能の操作に干渉すべきではありません。
そして、これは実際に Chrome 61 で見られる動作です。ブックマークレットはhttps://addons.mozilla.org/で実行されますscript-src: 'unsafe-inline'
。しかし、Firefox 56 ではブックマークレットはこの Web サイトで実行されず、CSP 違反が報告されています。
Firefoxのバグ レポートには、この問題に関する非常に長い議論があり、特にW3C 仕様に関する同様の議論へのリンクがあります。そのため、現時点では、ブックマークレットが CSP の影響を受けないことを信頼することはできません。いつでも CSP を完全に無効にすることができますが、それは重要な保護レイヤーが 1 つ少なくなります。
動作は mozillas wiki で指定されています。
CSP は、ユーザー提供のスクリプト (ブラウザーのアドオンやブックマークレットなど) の操作を妨げてはなりません。
こちらをご覧ください: https://wiki.mozilla.org/Security/CSP/Specification#Non-Normative_Client-Side_Considerations
はい、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
コードを読み取ります。