3

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

Stack Overflow 问题网站可以知道我是否正在运行用户脚本吗?回答网站检测脚本的多种方式。

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

4

2 回答 2

5

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

网站检测脚本的 3种主要方式是:

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

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

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

请参阅“网站可以知道我是否正在运行用户脚本吗?” 了解更多信息。

一些对策:

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

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

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

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

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

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

    1. 如果页面对此进行了检查,请将其查找的内容提供给它。例如click,您可能需要mouseover, mousedown, mouseup,mouseout序列而不是事件。
    2. 如果这还不够,那么应对措施与更改页面代码相同(替换 JS,拦截状态消息)。

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

于 2012-04-25T13:05:54.690 回答
2

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

不过有两点需要注意:

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

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

于 2012-04-25T11:25:53.283 回答