如何防止网页检测到我正在运行脚本?

时间:2012-04-25 11:18:27

标签: javascript facebook security greasemonkey userscripts

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

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

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

2 个答案:

答案 0 :(得分:3)

对于Firefox和Chrome,没有防止检测的灵丹妙药,这是一个过程和艺术......

网站检测脚本的3 原则方式是:

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

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

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

  4. 有关详细信息,请参阅"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. 如果页面电话状态为home,并且该状态随脚本的更改而更改,则拦截并替换这些消息。 (如果使用上一种方法,则不需要这样做。)您需要使用自定义防火墙,代理或路由器来执行此操作。

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

      1. 如果页面检查了这一点,请为其提供所需内容。例如,您可能需要clickmouseovermousedownmouseup序列,而不是mouseout事件。
      2. 如果这还不够,那么对策与对页面代码所做的更改相同(替换JS,拦截状态消息)。
    4. 重要!
      在极少数情况下,您 正在与试图阻止用户脚本的网站作战,这就像一场战争。网站管理员可以适应您的工作,环境可以不断变化。因此,为这样的网站编写脚本是一个持续的过程。

答案 1 :(得分:2)

脚本在用户一侧执行 - 您的身边。因此,站点的服务器代码无法知道您是否运行任何内容。

但有两点需要注意:

  1. 网站可以提供一些脚本在您的计算机上运行,​​以检查其环境,并在必要时进行报告。这些通常的目标是检测网站所有者不希望在其环境中拥有的某些特定脚本。
  2. 网站作者可以检查您的请求并分析它们是否与匹配来自网站提供的表单或AJAX的常规通信的模式不匹配。丢失的密钥或密钥与查询中的硬编码顺序不匹配,标识自动化客户端或缺少浏览器标题的标题以及类似的内容。如果您自动执行请求的速度比人类用户快得多,则会达到限制限制。
  3. 否则,如果您生成完全相同的响应并且不在全局可访问的环境中留下痕迹,则站点无法判断您是否在服务器端或客户端检查中使用了用户脚本。