Greasemonkeyスクリプトは、ページ内のスクリプトとの競合を防ぐために、何らかの方法で分離された無名関数に自動的にラップされることを知っています。
Chromeのユーザースクリプトでも同じことが起こりますか?
Greasemonkeyスクリプトは、ページ内のスクリプトとの競合を防ぐために、何らかの方法で分離された無名関数に自動的にラップされることを知っています。
Chromeのユーザースクリプトでも同じことが起こりますか?
はい、Greasemonkeyスクリプトは通常、無名関数でラップされています。そして、Chromeのユーザースクリプトも明らかに多すぎます。
しかし、もっと重要なことは、Greasemonkeyスクリプトは通常XPCNativeWrapperサンドボックスにラップされており、Google Chromeはユーザースクリプトを拡張機能に変換し、Googleが「孤立した世界」と呼ぶ分野で動作します2。
したがって、セキュリティのためにスクリプトコードを無名関数でラップする必要はありません。それらはすでに保護されています。
次の点に注意してください。
<script>
タグを作成する)と、そのコードはページのJSで確認できます。unsafeWindow
と、理論的にはページがそれに続き、わずかに昇格された特権を取得できます。リスクは非常に低く、実際に文書化されたエクスプロイトを見つけることはできませんでした。
~~~結論
として、スクリプトは両方のブラウザでさまざまな程度に分離されています。(そして、単に無名関数にラップされるだけではありません。)
Greasemonkeyには、Firefoxで利用できる優れた特権機能のセットがあります。Chromeのユーザースクリプトははるかに制限されていますが。
ただし、GMの機能の多くは、Tampermonkey拡張機能を使用してChromeに復元されます。
1 Greasemonkeyバージョン1.0 (2012年8月24日)以降、サンドボックスはディレクティブによって制御され@grant
ます。スクリプトがで実行される(またはデフォルトで)@grant none
場合、サンドボックスは使用されません。スクリプトはプライベートスコープで実行されるだけで、通常GM_
のAPI関数は機能しません。
2それはいくつかの厄介なサンドボックスよりもはるかに大きく/より良い音ではありませんか?(^ _ ^)
。