反爬检测小结(一)

背景

之前对”反爬反bot”做过一些调研工作:从网上搜索资料、研究分析厂商的产品。

如果你也准备做”反爬”相关的工作,希望我的小结能够加速你的进度。

爬虫

  • 是什么?

    在做”反爬”之前,我想有必要对我们的目标”爬虫”有一些了解。下面的分类有些只是我个人的分法,相信”老反爬工程师”有更细致的分类。

    按照产品形态上,爬虫可以分为:

    h5爬虫(包括pc端爬虫):主要爬取网页上的信息,比如淘宝首页的商品信息等

    app爬虫:主要爬取手机app上的信息;有一些基于monkeyrunner实现

    提供”反爬服务”的厂商也是根据h5和app提供了不同的解决方案。

    按照好坏,爬虫也可以分为:

    合法爬虫:百度、谷歌等爬虫就不能被”反爬产品”拦截,否则会影响客户站点的SEO

    恶意爬虫: 我们要防的

    按照爬虫的目的,可以粗略分为:

    扫描器爬虫:主要爬取api接口、文件资源等信息,作为”漏洞扫描器”的输入。比如 crawlergo

    数据爬虫:主要以爬取数据为目的,可能大部分爬虫都可以归属到这类。

    扫描器爬虫有一个特点是,它会做的很”通用”:我比较难想象攻击者会为了测试每一个站点,单独写一个特定的爬虫。因为”通用”,所以这种爬虫我觉得是属于比较好发现和防御的。

    相对来说,数据爬虫就会很”专用”:”爬虫工程师”有足够的耐心去盯着一个目标,和”反爬系统”做对抗。所以这里的对抗程度”最为激烈”(人和人的对抗)。

    因为我只研究了h5爬虫,所以我下面都是围绕h5爬虫的场景来描述。

  • 怎么实现h5爬虫?

    想要”反爬”,我们先要知道爬虫是怎么做的。

    网络上找了一个架构图

    爬虫架构

    这里可以看到架构中包含”代理ip”、”浏览器操作”、”验证码识别”等功能,这些功能也是”反爬系统”重点关注的场景。

    另外根据网上资料总结,爬虫”请求网站数据”有三种比较流行的实现方式:

    纯脚本:很多网络上的教程会教你用python语言,beautifulsoup、evaljs等库去实现一个网页爬虫;或者基于scrapy框架来实现

    调用”浏览器”:使用puppeteer、selenium等

    浏览器插件

    了解爬虫是怎么实现后,我们就可以来看看怎么”反恶意爬虫”。

  • 怎么”反恶意爬虫”?

    我们可以通过下面的方式识别”反恶意爬虫”:

    通过”可信前端”来识别爬虫:在”爬虫”调用”浏览器”来”请求网站数据”时,我们通过一些”手段”能够知道浏览器是爬虫在使用,而不是正常用户使用

    人机识别: 爬虫、扫描器、机器人等行为都可以通过”人机识别”来区分

    威胁情报:比如威胁情报能够告诉我们某个ip是否是代理ip,而从上面的架构图来看,”爬虫”是会有”代理ip”模块的

    数据风控:反爬本身就是业务安全,感觉和”风控反欺诈”用到的手段很相似。我没有做过风控,之前在微信读书看过《风控要略:互联网业务反欺诈之路》,感觉写得比较实在,推荐给你。

    我们识别”恶意爬虫”最终也是为了保护数据,而”保护数据”并不一定是需要识别”恶意爬虫”。比如 字体反爬

    甚至可以做一些”反制”,比如对抗假人 —— 前后端结合的 WAF提到通过”脱壳迷惑”、”蜜罐钓鱼”等来消耗”爬虫工程师”的时间资源,再比如爬虫数据最终都要存储,或许可以制造垃圾数据或者带sql注入payload的数据。

总结

本文粗略地对”爬虫”和”反爬”手段做了一些分类。后面文章我会讲述”反爬”手段的一些细节和案例。

数据流

另外我在调研中觉得有些资料还不错,放到了gist,你也可以看看。