Joh*_*Doe 8 javascript google-chrome sandbox userscripts tampermonkey
我的问题有两个方面。首先,沙盒模型如何工作,如何影响用户脚本,从网页和用户脚本角度可以访问/看到的内容,以及如果使用其他沙盒模型会影响页面,从而能够注意到脚本已注入到页面中(或不)。其次,如何将脚本注入到页面中,并且页面可以检测到它?
据我所知,当您使用时@grant none,沙箱已禁用,您将可以访问该网页及其javascript。如果您对javascript和/或DOM进行了任何更改,则该页面可能会检测到它。
我的理解是,如果使用的话@grant unsafeWindow,您的脚本将被隔离在自己的js上下文中,您所做的任何事情window都不会被网页看到,但是您可以通过来访问网页和javascript unsafeWindow。您将具有对DOM的常规访问权限,例如document返回常规页面文档,而无需说unsafeWindow.document。显然,您对DOM或页面js上下文所做的任何更改(例如unsafeWindow.foo = 'bar';)仍然可以检测到。其原因unsafe不是因为是否被检测到,而是因为您有可能GM_*在此模式下使不受信任的页面访问特权功能(在常规模式下不授予特权功能,这意味着@grant GM_*因为任何功能都会隔离js上下文,除非您(@grant unsafeWindow),否则您将无法访问页面的js上下文
如何将脚本注入页面?网页是否可能注意到用户脚本注入(假设用户脚本修改了页面上的NOTHING)。
例如,如果脚本是使用script标记注入的,那么我认为该页面可能会注意到脚本注入,甚至可以查看其代码吗?
沙盒模型在这种情况发生过程中是否具有任何作用,并使它“更安全”而不被看到?例如,如果您使用来隔离js上下文@grant unsafeWindow,那么网页上的js甚至可能看不到任何用户脚本加载事件,因此@grant unsafeWindow从根本上更安全,除非您去修改DOM或unsafeWindow当然。
我还假设不存在特殊功能,对象,属性等的泄漏(例如GM_info泄露到tampermonkey存在的网页上)。既不在@grant none模式@grant unsafeWindow下也不在模式下(前提是您没有向页面泄漏任何内容)
unsafeWindow只要您不修改任何内容(尤其是不要将特权GM_*函数暴露给unsafeWindow),这会让我觉得实际上在被检测到方面更安全(因为js上下文是隔离的)。例如,如果在@grant none模式下使用eventListener ,则可能会检测到它,但如果在@grant unsafeWindow模式下使用,则可能由于隔离而无法检测到它?此外,如果某个页面有可能检测到用户脚本加载(我不知道这是否可能实现),那么它将不知道js上下文是否隔离
简要总结一下,如果您不背叛页面,那么页面是否可以检测到用户脚本或tampermonkey的存在?
我的上述任何想法在任何领域都是错误的吗?如果是,那么它实际上是如何工作的?
一些需要澄清的信息:
用户脚本仅从页面被动地读取信息(可能使用MutationObserver)。它不会以任何方式改变任何内容,不使用任何js库(既不在用户脚本中也不从网页中使用),没有ajax调用,没有脚本节点,绝对没有单击等。脚本可以从JS vars中读取一些信息页面(假设那些var和函数没有被诱杀),以及使用WebSocket(内部服务)。也使用IIFE。因此,主要的问题是,篡改猴子本身(如果运行页面脚本)本身是否可检测?
在这个答案中:https : //stackoverflow.com/a/8548311 我可以排除1,4,5,6和7; 也可能是2和3,但我不知道坦佩罗尼本身是否会影响其中的任何一个
浏览器和 Greasemonkey/Tampermonkey/Violentmonkey 已经(主要)改进了它们如何进行注入、范围界定和沙盒。用户脚本不会使用普通<script>标签注入(尽管您的脚本在某些情况下可能需要创建此类标签)。
事实上,现在几乎不需要使用 IIFE。
但是,除了之前链接的问题中的检测方法:
@grant nonemode 中,如果您@require将自己复制到windowscope的库,则页面可以看到它。大多数库都不会这样做,但会这样做的是jQuery。Bottom line, is for a "read only" userscript, that does not require global libraries in @grant none mode, the page cannot detect it.
(Unless the page is greasyfork.org, etc., and you have the Allow communication with cooperate pages setting at the default value.)
If you discover some leak whereby a page can detect a "passive" script, let us know and chances are it can get plugged.
| 归档时间: |
|
| 查看次数: |
843 次 |
| 最近记录: |