通过浏览器指纹检测机器人

信息安全 javascript 检测 指纹识别
2021-09-04 08:39:13

我最近注意到一些公司已经开始提供基于浏览器指纹检测的机器人和抓取保护服务,然后阻止特定指纹访问站点(而不是阻止 IP)。

这里有一些例子:

它们之间存在差异,但显然所有这些公司都使用 Javascript 来获取详细的浏览器特定字段,如插件、字体和屏幕大小以及分辨率,将它们与可以从 HTTP 标头中获得的内容结合起来,并使用这些数据对客户端进行分类作为机器人/人类。

那么我的问题是:这种方法是否足够强大?攻击者欺骗 Javascript 客户端嗅探的所有数据字段(插件、字体、操作系统等)有多难?这种方法提供了什么样的保护措施 - 仅针对不太复杂的机器人,还是真的那么难以克服?

4个回答

我见过类似的服务,它们作为代理工作,并用一些真正混淆的 Javascript 对你的所有网页进行编码,这样一个真正的浏览器就可以毫无问题地浏览该网站,而如果不是不可能的话,这将是非常困难的(如果 JS 是每个请求随机且不同)对于传统的刮板执行相同的操作。

问题在于,只需运行一个真正的浏览器,而不是浪费时间创建一个爬虫,就很容易打败所有这些方法。

看看Selenium WebDriver,它允许您连接到真实的浏览器并以编程方式控制它 - 这些解决方案都不会检测到它,因为它在外部显示为干净的 Firefox(或 Chrome,或任何受支持的浏览器)安装世界。

与其浪费时间试图阻止机器人,不如问问自己为什么要阻止它们 - 如果它们使您的 Web 服务器超载,实施基于 IP 的速率限制,如果它们正在发送垃圾邮件,实施一些验证码,否则让它们成为,他们不会对你造成任何伤害。

此过程可能有助于识别和阻止大量机器人,但想要窃取您的数据的人会尽可能地自定义和随机化以避免被发现。那么不。这种方法对更复杂的爬虫并不是最有效的。

我已经看到爬虫每天数次彻底改变他们的 HTTP 请求。这些公司正在投资资金来开展他们的活动,他们将试图找到一种方法来避免这些静态检测。

阻止此流量的唯一方法是手动添加阻止规则,或者通过开发一个详细说明其他行为的大算法,例如:请求之间的时间差异、参数顺序、共享会话 ID 等。

从链接中阅读营销文案,您所说的“机器人”类型根本不是典型的“浏览器”,而通常只是一个简单的脚本,甚至是古老的wget.

如果是这种情况,那么确定脚本是否正在导航或是否是成熟的浏览器是微不足道的。但是,正如您所怀疑的,如果有人有兴趣击败这些僵尸程序拦截器,那么向服务器提供虚假数据以使其看起来像是一个有效的浏览器也是微不足道的。

例如,我创建了一个基于 Python 的网络爬虫,它为服务器提供了一个预配置的 UA(在我的例子中,它宣布自己是一个脚本)。至于其他数据(安装的字体),虽然我自己没有做过,但我相信如果可以将浏览器配置为响应数据,那么“机器人”也可以。

正如每个人都已经回答的那样,仅通过浏览器指纹识别是不可能检测到机器人的。

ShieldSquare,作为机器人检测公司,我们大部分时间都花在机器人上,我想说机器人的检测是可能的,除了 JS 设备指纹,还会考虑更多的事情:

  • 用户行为【可以分析用户在网站上做了什么,用户是在做广度优先模式还是深度优先模式。用户在网站上花费了多少分钟,用户访问了多少页面]

  • IP 信誉 [通过查看 IP 历史记录、来自 IP 的访问次数或具有模式,还可以对收到的请求进行网络取证,并确定请求是否来自 Tor / Proxy IP。]

  • 浏览器验证

事实上,所有这些计算都可以在 7 毫秒内完成。