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

vke*_*nos 14 javascript greasemonkey facebook userscripts tampermonkey

例如,Facebook.com可以在我的浏览器上运行版本控制脚本,并查看我是否使用脚本运行更改的HTML代码?

是否可以使用一个脚本来完成,该脚本可以读取缓存中的HTML代码并生成某种散列标记,该标记被发送回服务器并与发送到客户端的代码进行比较?

Bro*_*ams 23

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

这不是万无一失的,对于网站上可忽略不计的"威胁"来说通常是太麻烦了.(然而,一些网站管理员可能会对这些事情产生强迫症.)))

一些方法,取决于脚本的作用(没有特定的顺序):

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

  2. 一个站点可以AJAX-支持<script>节点的数量,寻找额外的东西.

  3. 同样,站点可以AJAX支持页面的任何或所有内容,并将其与预期值进行比较.

  4. 可以注意到额外的AJAX调用或不满足隐藏要求的AJAX调用(并且允许看起来成功).

  5. 如果脚本以unsafeWindow正确(错误)方式使用,则页面可以检测到甚至劫持(略微)提升的权限.

  6. 可以检测到没有鼠标悬停事件之前的"点击".我实际上已经看到过在野外使用过的.

  7. 页面的javascript通常可以检测脚本生成的点击(等)与用户生成的点击不同.(谢谢,c69,提醒.)

然而,最终,优势在于用户编写者.可以在用户端检测和阻止网页采取的任何对策.即使是定制的,所需的插件或所需的硬件加密狗也可能被熟练和积极的用户所颠覆.

  • 在Opera中,页面现在可以检测到虚假点击(通过`.isTrusted`属性),可能很快就会在其他浏览器中出现. (3认同)
  • @ c69,它[在Firefox中可能有一段时间](http://help.dottoro.com/ljoljvsn.php)并且在IE9中的支持有限. (2认同)

eri*_*old 5

更新:从Greasemonkey 3.3开始,以下方法完全无效.



请参阅(死链接)如何检测Greasemonkey.

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

已过时的选项1:

if (Components.interfaces.gmIGreasemonkeyService) {
  alert("I smell a monkey!");
}
Run Code Online (Sandbox Code Playgroud)


过时的选项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>
Run Code Online (Sandbox Code Playgroud)