在所有地址上 运行 我自己的用户脚本有风险吗?
Is it risky to run my own userscripts on all addresses?
Tampermonkey(适用于大多数浏览器)和 Greasemonkey(适用于 Firefox)同时支持 @match
和 @include
指令。
当我开始了解它们之间的区别时,发现 @match
更严格一些:userscript 不会在某些地址上启动,这可能被认为具有潜在危险或只是不需要。
- https://wiki.greasespot.net/Include_and_exclude_rules
- https://wiki.greasespot.net/Metadata_Block#@match
由此产生了问题:
a) 在所有地址上启动我自己的用户脚本是否有任何潜在风险(即 @match *://*/*
和 @include
相同)?
或者,b) 在某些地址上启动用户脚本的限制仅与第三方 用户脚本相关,即从某些站点下载的用户脚本,因此可能包含一些恶意软件代码?
运行 您自己的用户脚本在所有地址上是否存在任何潜在风险?是的,一个小的;见下文。
(目前)不在所有页面上 运行 自己的 用户脚本的主要原因是:
- 浏览器性能: 加载和 运行 脚本需要时间,CPU 周期,有时还需要磁盘访问。通常,延迟几乎不明显,但如果它没有执行有用的服务,为什么还要延迟呢?
- 意想不到的副作用: 您认为您的
$(".someclass").remove();
代码只影响 X 个页面——直到它没有。挠头,然后是可选的咒骂......
其他常见的副作用包括 script clashes that lead to page or userscript failures.
- iframe: 脚本 运行 默认在 iframe 上,有些页面有数十个 iframe and/or iframe 嵌套了好几层。
这是性能和副作用问题的乘数。
- 风险:泄露敏感代码:在非沙盒代码中使用
$.get( "frbyPlay.me/pics?user=admin&pw=1234"...
,错误的站点可以看到它(或AJAX)。
当使用页面的 JS 时,攻击的途径是无限的。幸运的是,这通常是一个非常低的风险并且很容易缓解,但是无知或自满会导致严重的尴尬。
- 风险:暴露于 "Breaking Bad": 最近,a formerly much loved and trusted extension turned evil.
当您的脚本使用的某些库(例如 jQuery)被黑或 "commercially optimized" 时会发生什么?脚本 运行 的页数越少,发生恶作剧的机会就越少,损害扩散就越小。
(当然,如果 Tampermonkey 本身长出了山羊胡子,那么无论如何我们都会被打败。)
请注意,原因 1 和 2 也是您应该尽可能使用 @match
而不是 @include
的原因。 @match
解析网址的速度更快,而且在 unwanted/unexpected 个网站上触发的可能性也大大降低。
(并且,在 Tampermonkey 中,@match
在 Tampermonkey 仪表板中添加了这些小站点图标。)
Tampermonkey(适用于大多数浏览器)和 Greasemonkey(适用于 Firefox)同时支持 @match
和 @include
指令。
当我开始了解它们之间的区别时,发现 @match
更严格一些:userscript 不会在某些地址上启动,这可能被认为具有潜在危险或只是不需要。
- https://wiki.greasespot.net/Include_and_exclude_rules
- https://wiki.greasespot.net/Metadata_Block#@match
由此产生了问题:
a) 在所有地址上启动我自己的用户脚本是否有任何潜在风险(即 @match *://*/*
和 @include
相同)?
或者,b) 在某些地址上启动用户脚本的限制仅与第三方 用户脚本相关,即从某些站点下载的用户脚本,因此可能包含一些恶意软件代码?
运行 您自己的用户脚本在所有地址上是否存在任何潜在风险?是的,一个小的;见下文。
(目前)不在所有页面上 运行 自己的 用户脚本的主要原因是:
- 浏览器性能: 加载和 运行 脚本需要时间,CPU 周期,有时还需要磁盘访问。通常,延迟几乎不明显,但如果它没有执行有用的服务,为什么还要延迟呢?
- 意想不到的副作用: 您认为您的
$(".someclass").remove();
代码只影响 X 个页面——直到它没有。挠头,然后是可选的咒骂......
其他常见的副作用包括 script clashes that lead to page or userscript failures. - iframe: 脚本 运行 默认在 iframe 上,有些页面有数十个 iframe and/or iframe 嵌套了好几层。
这是性能和副作用问题的乘数。 - 风险:泄露敏感代码:在非沙盒代码中使用
$.get( "frbyPlay.me/pics?user=admin&pw=1234"...
,错误的站点可以看到它(或AJAX)。
当使用页面的 JS 时,攻击的途径是无限的。幸运的是,这通常是一个非常低的风险并且很容易缓解,但是无知或自满会导致严重的尴尬。 - 风险:暴露于 "Breaking Bad": 最近,a formerly much loved and trusted extension turned evil.
当您的脚本使用的某些库(例如 jQuery)被黑或 "commercially optimized" 时会发生什么?脚本 运行 的页数越少,发生恶作剧的机会就越少,损害扩散就越小。
(当然,如果 Tampermonkey 本身长出了山羊胡子,那么无论如何我们都会被打败。)
请注意,原因 1 和 2 也是您应该尽可能使用 @match
而不是 @include
的原因。 @match
解析网址的速度更快,而且在 unwanted/unexpected 个网站上触发的可能性也大大降低。
(并且,在 Tampermonkey 中,@match
在 Tampermonkey 仪表板中添加了这些小站点图标。)