例如,Facebook.com可以在我的浏览器上运行版本控制脚本,并查看我是否使用脚本运行更改的HTML代码?
这可以通过一个脚本来完成,该脚本可以读取缓存中的HTML代码并生成某种散列标记,该标记被发送回服务器并与发送给客户端的代码进行比较吗?
答案 0 :(得分:21)
是的,从理论上讲,网站可以在各种情况下推断出脚本的存在。
这不是万无一失的,对于网站上可忽略不计的“威胁”来说通常是太麻烦了。 (然而,一些网站管理员可能会对这些事情产生强迫症。))。
一些方法,取决于脚本的作用(没有特定的顺序):
游戏或竞价网站可以监控“出价”点击的时间(速度和规律性)。
网站可以AJAX支持所谓的<script>
节点的数量,寻找额外内容。
同样,网站可以AJAX支持页面的任何或所有内容,并将其与预期值进行比较。
可以注意到额外的AJAX调用或不符合隐藏要求的AJAX调用(并且允许它们显示成功)。
如果脚本以正确(错误)方式使用unsafeWindow
,a page can detect that and even hijack (slightly) elevated privileges。
可以检测到没有鼠标悬停事件之前的“点击”。我实际上已经看到过这种情况在野外使用。
A page's javascript can often detect script-generated clicks (etc.)与用户生成的不同。 (谢谢,c69,提醒。)
但最终,优势在于用户编写者。可以在用户端检测和阻止网页采取的任何对策。即使是定制的,必需的插件或所需的硬件加密狗也可能被熟练和积极的用户所颠覆。
答案 1 :(得分:5)
更新:自Greasemonkey 3.3起,以下方法完全失效。
参见(死链接) How-to Detect Greasemonkey 。
Javascript检测GM是否已安装(但不是脚本是否实际在该页面上运行):
已过时的选项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>