Javascript 网站能否知道我是否正在运行用户脚本?

Javascript 网站能否知道我是否正在运行用户脚本?,javascript,facebook,greasemonkey,userscripts,tampermonkey,Javascript,Facebook,Greasemonkey,Userscripts,Tampermonkey,例如,Facebook.com能否在我的浏览器上运行一个版本控制脚本,并找出我是否正在使用脚本运行经过修改的HTML代码 这可以通过一个脚本来完成吗?该脚本可以读取缓存中的HTML代码,并生成某种散列标记,然后将其发送回服务器,并与发送到客户端的代码进行比较 是的,从理论上讲,站点可以推断脚本在各种情况下的存在 这并不是万无一失的,而且通常对于站点的可忽略的“威胁”来说太麻烦了。(再说一次,有些网站管理员可能会对这些事情产生偏执狂。) 某些方法,具体取决于脚本的作用(无特定顺序): 游戏或拍卖网

例如,Facebook.com能否在我的浏览器上运行一个版本控制脚本,并找出我是否正在使用脚本运行经过修改的HTML代码


这可以通过一个脚本来完成吗?该脚本可以读取缓存中的HTML代码,并生成某种散列标记,然后将其发送回服务器,并与发送到客户端的代码进行比较

是的,从理论上讲,站点可以推断脚本在各种情况下的存在

这并不是万无一失的,而且通常对于站点的可忽略的“威胁”来说太麻烦了。(再说一次,有些网站管理员可能会对这些事情产生偏执狂。)

某些方法,具体取决于脚本的作用(无特定顺序):

  • 游戏或拍卖网站可以监控“出价”点击的时间(速度和规律性)

  • 一个站点可以通过AJAX返回节点的计数,比如说,
    节点,寻找额外的节点

  • 类似地,站点可以使用AJAX返回页面的任何或所有内容,并将其与预期值进行比较

  • 可以注意到额外的AJAX调用,或者不满足隐藏需求的AJAX调用(并允许它们看起来成功)

  • 如果脚本以正确(错误)的方式使用
    unsafeWindow

  • 可以检测到鼠标悬停事件之前未出现的“点击”。我真的见过这种在野外使用

  • 与用户生成的不同。(谢谢提醒。)


  • 然而,最终的优势在于用户脚本编写器。网页采取的任何应对措施都可以在用户端检测到并阻止。即使是定制的、必需的插件或必需的硬件加密狗,也可能被技术娴熟且充满激情的用户破坏。

    更新:以下方法截至目前完全无效



    请参阅(死链接)

    用于检测GM是否已安装的Javascript(但不检测脚本是否在该页面上实际运行):

    过时的备选方案1:

    if (Components.interfaces.gmIGreasemonkeyService) {
      alert("I smell a monkey!");
    }
    

    过时的备选方案2:

    <script type="text/javascript" src="resource://greasemonkey/addons4.js"></script>
    <script type="text/javascript">
    if (typeof GM_addonsStartup !== "undefined") {
      alert("I smell a monkey!");
    }
    </script>
    
    
    if(GM_addonStartup的类型!=“未定义”){
    警惕(“我闻到了猴子的味道!”);
    }
    
    Facebook不是静态HTML,因此哈希是无用的,因此不可能。你有理由相信Facebook正在检测你的用户脚本吗?若然,原因为何?你怎么会怀疑这一点?Facebook并不关心你的用户脚本,事实上,他们频繁的界面更改本身就帮助他们击退了许多用户脚本,尤其是那些没有积极维护的脚本。在Opera中,page现在可以检测假点击(通过
    。isTrusted
    属性),可能很快就可以在其他浏览器中使用它了。@c69,它在IE9中的支持是有限的。@MikeOrtiz,没有。用户脚本本身存在于一个单独的作用域中,页面无法看到——即使在
    @grant none
    模式下。。。如果用户脚本创建
    节点,则页面可以看到这些节点的源。@MikeOrtiz,具体取决于。如果需要,请提出一个新问题。请确保包含MCVE。@Edge,不,这不再有效,请参阅更新的答案。