在所有地址上运行我自己的用户脚本是否有风险?

时间:2018-09-07 15:50:13

标签: greasemonkey userscripts tampermonkey

Tampermonkey(对于大多数浏览器)和Greasemonkey(对于Firefox)都支持@match@include指令。

当我开始阅读它们之间的区别时,发现@match更为严格:用户脚本不会在某些地址上启动,这可能被认为具有潜在危险或只是不受欢迎。

由此引发了一个问题:

a)在所有地址上启动我自己的用户脚本是否有任何潜在的风险(即@match *://*/*,对于@include)?

或者,b)在某些地址上启动用户脚本的限制仅与第三方用户脚本有关,即从某些站点下载并因此可能包含一些恶意代码的用户脚本?

1 个答案:

答案 0 :(得分:4)

在所有地址上运行自己的用户脚本是否存在潜在的风险?是的,很小的一个;见下文。

(当前)不在所有页面上运行 用户脚本的主要原因是:

  1. 浏览器性能:加载和运行脚本需要时间,CPU周期,有时还需要磁盘访问。通常情况下,延迟几乎不会引起注意,但是,如果延迟无法提供有用的服务,为什么还要完全保留呢?
  2. 意外的副作用::您认为您的$(".someclass").remove();代码只会​​影响X页,直到没有。头部刮擦,并随后进行可选的诅咒...
    其他常见的副作用包括script clashes that lead to page or userscript failures
  3. iframe:默认情况下,脚本在iframe上运行,并且某些页面上有数十个iframe和/或iframe嵌套了多个级别。
    这是性能和副作用问题的乘数。
  4. 风险:敏感代码泄漏:在非沙盒代码中使用$.get( "frbyPlay.me/pics?user=admin&pw=1234"...,错误的站点可以看到它(或AJAX)。
    使用页面的JS时,攻击的途径是无限的。幸运的是,这通常是极低的风险,可以轻松缓解,但是无知或自满会导致严重的尴尬。
  5. 风险:接触“绝命毒药”:最近,a formerly much loved and trusted extension turned evil
    当您的脚本使用的某些库(例如jQuery)遭到黑客入侵或“经过商业优化”时,会发生什么?脚本运行的页面越少,出现恶作剧的机会就越少,损害的扩散也就越小。
    (当然,如果坦佩蒙奇本身长出山羊胡子,那么无论如何我们都会被认捐。)

请注意,原因1和2也是您应尽可能使用@match而不是@include的原因。 @match解析网址的速度更快,而且在不需要的/意外的网站上触发的可能性也大大降低。
(并且,在Tampermonkey中,@match在Tampermonkey仪表板中添加了这些小的站点图标。)