【问题标题】:How can I prevent a webpage from detecting I am running a script?如何防止网页检测到我正在运行脚本?
【发布时间】:2012-04-25 11:18:27
【问题描述】:

在 facebook.com 上尝试了脚本后,我注意到有几分钟它不允许我连接到 facebook.com。这种情况发生了不止一次,所以我怀疑 Facebook 不喜欢使用用户脚本来弄乱他们的代码。

堆栈溢出问题 Can a website know if I am running a userscript? 回答了网站检测脚本的多种方式。

现在我想知道如何欺骗网站使其不检测我可能正在运行的任何脚本。 有没有办法知道我的用户脚本 HTML 更改在网站上触发了什么?

【问题讨论】:

  • 你的声音听起来好像你在犯罪。 IMO 您完全可以在浏览器中对发送给您的数据执行您想要的操作。
  • 嗯嗯。并且网站的作者非常适合尝试检测和阻止在线游戏或几乎任何其他依赖用户手动操作的项目中的自动化。
  • 我怀疑 Facebook 是否正在检查用户脚本。您可能触发了其他事情(可能是密码错误导致登录延迟),或者网络陷入困境只是巧合。此外,在进行大量 GM 开发时,Firefox 经常会出现内存膨胀和缓慢的情况。
  • 在我看来,如果有一些众所周知的“大众交友”或“大众投票”脚本,它很可能是 Facebook 检测系统的目标。如果脚本从 FB 聚合几个不同的页面,节流也可能生效。
  • @dystroy 正如我在下面所说的,脚本的作用是加密和解密我在浏览器上发布的帖子。所以对于 facebook,这意味着如果这个脚本被广泛使用,它可能对为广告目的分析用户。所以是的,这对 facebook 来说是一种犯罪。

标签: javascript facebook security greasemonkey userscripts


【解决方案1】:

对于 Firefox 和 Chrome 来说,没有什么灵丹妙药可以阻止检测,这是一个过程,也是一门艺术......

网站检测脚本的三种原则方法是:

  1. 乱序或过于频繁的 AJAX 请求。

  2. 页面代码的更改(HTML、全局 JS 甚至 CSS)。

  3. 不自然的鼠标或键盘操作。

更多信息请参见"Can a website know if I am running a userscript?"

一些对策:

  1. 对于您的脚本发出的 AJAX 请求:

    1. 使用Wireshark 或类似方法来分析正常AJAX 调用的流量。确保您以相同的顺序发送相同类型的电话。
    2. 确保您的请求显示与页面相同的标题和数据。
    3. 发送 AJAX 请求的速度不要超过页面正常速度或用户可以合理触发的速度。
    4. 考虑为脚本的请求添加随机延迟,使它们的时间不统一。
    5. 请注意页面请求中不断变化的字段。确保您知道如何生成正确的值;不要只是剪切和粘贴。

  2. 对于您对页面代码所做的更改:
    该页面可以使用自己的 javascript 完全在本地处理这些,也可以将状态或代码片段发送回服务器。

    1. 阻止并替换页面的 javascript。 NoScript、RequestPolicy、防火墙和代理等工具可用于阻止 JS。
      然后使用 Greasemonkey 添加您的编辑 版本的页面 JS。即使页面的所有 JS 被禁用,Greasemonkey 也会运行。

    2. 如果页面将状态返回主页,并且该状态响应脚本的更改而更改,则拦截并替换这些消息。 (如果您使用以前的方法,则不需要这样做。)您将需要自定义防火墙、代理或路由器来执行此操作。

  3. 对于您触发的事件(鼠标点击、填写字段等):

    1. 如果页面检查了这个,就给它寻找的东西。例如,您可能需要 mouseovermousedownmouseupmouseout 序列,而不是 click 事件。
    2. 如果这还不够,那么应对措施与更改页面代码相同(替换JS,拦截状态消息)。

重要!
在极少数情况下,您 与试图阻止用户脚本的网站作战,这就像一场战争。站长可以适应你在做什么,环境可以不断变化。因此,为此类网站编写脚本是一个持续的过程。

【讨论】:

  • 非常感谢。你是这方面的专家。你回答了我的两个问题。
  • 不客气;很高兴能提供帮助,祝你好运。此外,如果您发现 Facebook 正在检查脚本的证据,请告知我们。 (代码 sn-ps 和/或捕获的状态消息就是很好的证明。)
  • 我讨厌发布 necropost,但是网站管理员可以跟踪您窗口的鼠标位置吗?如果您并行运行许多脚本选项卡,我假设所有这些选项卡的 mousepos 都是 0,0。
  • @Andrew,以a simple search 开头。而且,这仅仅是个开始。
【解决方案2】:

脚本在用户端执行——你的端。因此,站点的服务器代码无法知道您是否运行任何东西。

但是有两点需要注意:

  1. 站点可以提供一些脚本以在您的计算机上运行,​​这些脚本将检查其环境并在必要时进行报告。这些通常用于检测网站所有者不希望在其环境中拥有的某些特定脚本。
  2. 网站作者可以检查您的请求并分析它们是否与来自网站提供的表单或 AJAX 的常规通信匹配的模式不匹配。缺少键或键与查询中的硬编码顺序不匹配、标识自动化客户端的标头或缺少浏览器标头等。如果您自动发出请求的速度比人类用户快得多,那么达到节流限制也应该属于此类别。

否则,如果您生成完全相同的响应并且不在全局可访问的环境中留下痕迹,则站点无法判断您是在使用带有服务器端检查还是客户端检查的用户脚本。

【讨论】:

  • 我正在创建一个脚本来自动查找加密的帖子并使用我提供的密码对其进行解密。所以脚本的作用是它改变了页面的 html 代码。无论如何,这是特定的脚本那个 facebook 想要阻止?问题仍然存在:我可以阻止 facebook 知道我正在运行一个脚本吗?
  • 你如何“找到”他们?您是否查询帖子列表然后快速获取它们?那么你很可能会受到限制。
  • 加密后的帖子前面有一个特定的关键字。就像帖子是“kkkkkjkhfkajhfiuhfuer”,脚本搜索“kkkkk”然后把帖子的其余部分放在一个像 myjsondomain.com/jkhfkajhfiuhfuer 这样的链接,这会检索带有加密消息的 json。之后,它会使用您提供的密码来解密消息。
  • 这应该不是用户脚本的问题。您的 JSON 提供服务器是否依次请求 FB?它是否提供 X-Forwarded-For 或类似的标头来指示发起者?这也可以用于节流。
猜你喜欢
  • 2017-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
  • 1970-01-01
  • 2012-04-30
  • 2019-04-01
相关资源
最近更新 更多