FantasticLBP / Anti-WebSpider

Web 端反爬技术方案

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

关于对canvas指纹反爬。。。

kingking888 opened this issue · comments

早期我们和竞争对手打的时候,双方的技术都比较初级。后来慢慢的,爬虫在升级,反爬虫也在升级。这个我们称为“进化”。我们曾经给对方放过水,来试图拖慢他们的进化速度。然而,效果不是特别理想。爬虫是否进化,取决于爬虫工程师自己的KPI,而不是反爬虫的进化速度。

后期打到白热化的时候,用的技术越来越匪夷所思。举个例子,很多人会提,做反爬虫会用到canvas指纹,并认为是最高境界。其实这个东西对于反爬虫来说也只是个辅助,canvas指纹的含义是,因为不同硬件对canvas支持不同,因此你只要画一个很复杂的canvas,那么得出的image,总是存在像素级别的误差。考虑到爬虫代码都是统一的,就算起selenium,也是ghost的,因此指纹一般都是一致的,因此绕过几率非常低。

但是!这个东西天生有两个缺陷。第一是,无法验证合法性。当然了,你可以用非对称加密来保证合法,但是这个并不靠谱。其次,canvas的冲突概率非常高,远远不是作者宣称的那样,冲突率极低。也许在国外冲突是比较低,因为国外的语言比较多。但是国内公司通常是IT统一装机,无论是软件还是硬件都惊人的一致。我们测试canvas指纹的时候,在携程内部随便找了20多台机器,得出的指纹都完全一样,一丁点差别都没有。因此,有些“高级技巧”其实一点都不实用。

Canvas 策略会存在较高误伤率。如果在绘制的时候对于绘制参数较高(OCR 不利)则用户体验不好,如果较低则安全性较低。目前没看到特别成熟的 Canvas 案例。

如果看到成熟的 Canvas 反爬虫案例,请告知我

commented

(小声逼逼)浏览器 js 环境一给你劫持走,你调用的绘制 API 都是我偷换掉的,我想绘制啥绘制啥。

顺便说一句,这种技术方案公开出来,只是会让攻击方有更多一丢丢的参考。攻击方可能做 misc 的同学会很开心能够和你这种方案斗智斗勇,反而激发了乐趣,哈哈。

只要收益足够,重新构建一个 WebKit,深度魔改一下浏览器内核,也并不是没有这样做的。