5

我知道 Greasemonkey 脚本会自动包装在以某种方式隔离的匿名函数中,以防止它们与页面中的脚本冲突。

Chrome 用户脚本也会发生同样的情况吗?

4

1 回答 1

7

是的,Greasemonkey 脚本通常包装在一个匿名函数中。而且,Chrome 用户脚本显然也是如此

但是,更重要的是,Greasemonkey 脚本通常1包装在XPCNativeWrapper沙箱中,而 Google Chrome 将用户脚本转换为扩展程序,并且它们在 Google 称之为“孤立世界”的竞技场中运行2

因此,出于安全目的,您无需将脚本代码包装在匿名函数中,它们已经受到保护。

请注意:

  1. 如果您直接将代码注入页面(创建<script>标签),那么页面的 JS 可以看到该代码。
  2. 如果您使用unsafeWindow,则该页面理论上可以跟随它并获得略微提升的权限。

风险非常低,我无法在野外找到任何记录在案的漏洞利用。

~~~
底线,脚本在两个浏览器中被不同程度地隔离。(而不仅仅是被包裹在匿名函数中。)

Greasemonkey在 Firefox 中提供了一组不错的特权功能。虽然 Chrome 中的用户脚本受到更多限制。

然而,通过使用Tampermonkey 扩展,GM 的大部分功能都恢复到 Chrome 。




1Greasemonkey 版本 1.0(2012 年 8 月 24 日)开始,沙箱由指令@grant控制。如果脚本使用 (或默认为) 运行@grant none,则不使用沙箱。该脚本仅在私有范围内运行,正常GM_的 API 函数将不起作用。

2这听起来不是比一些讨厌的沙盒更大/更好吗?(^_^)

.

于 2011-07-12T05:52:23.427 回答