背景
之前对”反爬反bot”做过一些调研工作:从网上搜索资料、研究分析厂商的产品。
如果你也准备做”反爬”相关的工作,希望我的小结能够加速你的进度。
爬虫
-
是什么?
在做”反爬”之前,我想有必要对我们的目标”爬虫”有一些了解。下面的分类有些只是我个人的分法,相信”老反爬工程师”有更细致的分类。
按照产品形态上,爬虫可以分为:
h5爬虫(包括pc端爬虫):主要爬取网页上的信息,比如淘宝首页的商品信息等
app爬虫:主要爬取手机app上的信息;有一些基于monkeyrunner[1]实现
提供”反爬服务”的厂商也是根据h5和app提供了不同的解决方案。
按照好坏,爬虫也可以分为:
合法爬虫:百度、谷歌等爬虫就不能被”反爬产品”拦截,否则会影响客户站点的SEO
恶意爬虫:我们要防的
按照爬虫的目的,可以粗略分为:
扫描器爬虫:主要爬取api接口、文件资源等信息,作为”漏洞扫描器”的输入。比如 crawlergo[2]
数据爬虫:主要以爬取数据为目的,可能大部分爬虫都可以归属到这类。
扫描器爬虫有一个特点是,它会做的很”通用”:我比较难想象攻击者会为了测试每一个站点,单独写一个特定的爬虫。因为”通用”,所以这种爬虫我觉得是属于比较好发现和防御的。
相对来说,数据爬虫就会很”专用”:”爬虫工程师”有足够的耐心去盯着一个目标,和”反爬系统”做对抗。所以这里的对抗程度”最为激烈”(人和人的对抗)。
因为我只研究了h5爬虫,所以我下面都是围绕h5爬虫的场景来描述。
-
怎么实现h5爬虫?
想要”反爬”,我们先要知道爬虫是怎么做的。
从网络上[3]找了一个架构图
爬虫架构 这里可以看到架构中包含”代理ip”、”浏览器操作”、”验证码识别”等功能,这些功能也是”反爬系统”重点关注的场景。
另外根据网上资料总结,爬虫”请求网站数据”有三种比较流行的实现方式:
纯脚本:很多网络上的教程会教你用python语言,beautifulsoup、evaljs等库去实现一个网页爬虫;或者基于scrapy框架来实现
调用”浏览器”:使用puppeteer、selenium等
浏览器插件
了解爬虫是怎么实现后,我们就可以来看看怎么”反恶意爬虫”。
-
怎么”反恶意爬虫”?
我们可以通过下面的方式识别”反恶意爬虫”:
通过”可信前端”来识别爬虫:在”爬虫”调用”浏览器”来”请求网站数据”时,我们通过一些”手段”能够知道浏览器是爬虫在使用,而不是正常用户使用
人机识别:爬虫、扫描器、机器人等行为都可以通过”人机识别”来区分
威胁情报:比如威胁情报能够告诉我们某个ip是否是代理ip,而从上面的架构图来看,”爬虫”是会有”代理ip”模块的
数据风控:反爬本身就是业务安全,感觉和”风控反欺诈”用到的手段很相似。我没有做过风控,之前在微信读书看过《风控要略:互联网业务反欺诈之路》,感觉写得比较实在,推荐给你。
我们识别”恶意爬虫”最终也是为了保护数据,而”保护数据”并不一定是需要识别”恶意爬虫”。比如 字体反爬[4]
甚至可以做一些”反制”,比如对抗假人 —— 前后端结合的 WAF[5]提到通过”脱壳迷惑”、”蜜罐钓鱼”等来消耗”爬虫工程师”的时间资源,再比如爬虫数据最终都要存储,或许可以制造垃圾数据或者带sql注入payload的数据。
总结
本文粗略地对”爬虫”和”反爬”手段做了一些分类。后面文章我会讲述”反爬”手段的一些细节和案例。
![反爬检测小结(1) 反爬检测小结(1)](https://ctfiot.oss-cn-beijing.aliyuncs.com/uploads/2021/12/2-1639701644-1.png)
另外我在调研中觉得有些资料还不错,放到了gist[6],你也可以看看。
参考资料
monkeyrunner: https://developer.android.com/studio/test/monkeyrunner
[2]crawlergo: https://github.com/Qianlitp/crawlergo
[3]网络上: https://pitechan.com/%E7%88%AC%E8%99%AB%E5%B7%A5%E7%A8%8B%E5%B8%88%E7%9A%84%E8%87%AA%E6%88%91%E4%BF%AE%E5%85%BB%E4%B9%8B%E7%B3%BB%E7%BB%9F%E6%9E%B6%E6%9E%84/
[4]字体反爬: https://zhuanlan.zhihu.com/p/37838586
[5]对抗假人 —— 前后端结合的 WAF: https://www.cnblogs.com/index-html/p/frontend-based-war.html
[6]gist: https://gist.github.com/leveryd/5aad51fff569308748370dcf1609bc1c
原文始发于微信公众号(leveryd):反爬检测小结(1)