例如,Facebook.com 是否可以在我的浏览器上运行版本控制脚本并确定我是否使用脚本运行更改的 HTML 代码?
这是否可以通过一个脚本来完成,该脚本可以读取缓存中的 HTML 代码并生成某种哈希标记,然后将其发送回服务器并与发送到客户端的代码进行比较?
例如,Facebook.com 是否可以在我的浏览器上运行版本控制脚本并确定我是否使用脚本运行更改的 HTML 代码?
这是否可以通过一个脚本来完成,该脚本可以读取缓存中的 HTML 代码并生成某种哈希标记,然后将其发送回服务器并与发送到客户端的代码进行比较?
是的,理论上,一个站点可以推断出脚本在各种情况下的存在。
这不是万无一失的,而且对于网站的微不足道的“威胁”来说通常太麻烦了。(话又说回来,一些网站管理员可能对这些事情有强迫症。;))
一些方法,取决于脚本的作用(没有特别的顺序):
游戏或拍卖网站可以监控“出价”点击的时间(速度和规律性)。
一个站点可以通过 AJAX-back 计算<script>
节点的数量,寻找额外的东西。
类似地,站点可以 AJAX 支持页面的任何或所有内容,并将其与预期值进行比较。
可以记录额外的 AJAX 调用或不满足隐藏要求的 AJAX 调用(并允许显示为成功)。
如果脚本以unsafeWindow
正确(错误)的方式使用,页面可以检测到甚至劫持(稍微)提升的权限。
可以检测到之前没有鼠标悬停事件的“点击”。我实际上已经看到它在野外使用过。
页面的 javascript 通常可以将脚本生成的点击(等)检测为不同于用户生成的点击。(感谢c69的提醒。)
然而,最终,优势在于用户脚本编写者。网页采取的任何反制措施都可以在用户端被检测和阻止。即使是定制的、所需的插件或所需的硬件加密狗也可以被熟练和积极的用户颠覆。
更新:从Greasemonkey 3.3开始,以下方法完全无效。
请参阅(死链接)如何检测 Greasemonkey。
检测是否安装了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>