【问题标题】:Is it risky to run my own userscripts on all addresses?在所有地址上运行我自己的用户脚本是否有风险?
【发布时间】:2018-09-07 15:50:13
【问题描述】:
Tampermonkey(适用于大多数浏览器)和 Greasemonkey(适用于 Firefox)同时支持 @match 和 @include 指令。
当我开始阅读它们之间的区别时,发现@match 更严格一些:不会在某些地址上启动用户脚本,这可能被认为具有潜在危险或只是不需要。
由此产生了一个问题:
a) 是否存在在所有地址上启动我自己的用户脚本的任何潜在风险(即@match *://*/*和@987654327相同@)?
或者,b) 在某些地址上启动用户脚本的限制仅与 3rd-party 用户脚本相关,即从某些站点下载的用户脚本,因此可能包含一些恶意代码?
【问题讨论】:
标签:
greasemonkey
userscripts
tampermonkey
【解决方案1】:
在所有地址上运行您自己的用户脚本是否存在潜在风险?是的,一个小的;见下文。
(目前)不在所有页面上运行您自己的用户脚本的主要原因是:
-
浏览器性能:加载和运行脚本需要时间、CPU 周期,有时还需要磁盘访问。通常情况下,延迟几乎不会引起注意,但如果它没有提供有用的服务,为什么还要延迟呢?
-
意外的副作用:您认为您的
$(".someclass").remove(); 代码只会影响 X 个页面,但实际上不会。随之而来的是挠头和可选的诅咒...
其他常见的副作用包括script clashes that lead to page or userscript failures。
-
iframes:脚本默认在 iframes 上运行,有些页面有许多 iframes 和/或 iframes 嵌套了几个级别。
这是性能和副作用问题的乘数。
-
风险:泄露敏感代码:在非沙盒代码中使用
$.get( "frbyPlay.me/pics?user=admin&pw=1234"...,错误的站点可以看到它(或 AJAX)。
使用页面的 JS 时,攻击的途径是无限的。幸运的是,这通常是一个非常低的风险并且很容易减轻,但无知或自满可能会导致严重的尴尬。
-
风险:接触《绝命毒师》: 最近,a formerly much loved and trusted extension turned evil。
当您的脚本使用的某些库(如 jQuery)被黑客入侵或“商业优化”时会发生什么?脚本运行的页面越少,发生恶作剧的机会就越少,伤害范围就越小。
(当然,如果 Tampermonkey 自己长过山羊胡子,那我们无论如何都会被打败。)
请注意,原因 1 和 2 也是您应该尽可能使用 @match 而不是 @include 的原因。 @match 可以更快地解析网址,并且在不需要/意外的网站上触发的可能性也非常小。
(并且,在 Tampermonkey 中,@match 在 Tampermonkey 仪表板中添加了这些小站点图标。)