反爬检测小结(1)

admin 2021年12月17日15:14:04评论126 views字数 1924阅读6分24秒阅读模式

背景

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

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

爬虫

  • 是什么?

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

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

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

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

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

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

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

    恶意爬虫:我们要防的

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

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

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

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

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

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

  • 怎么实现h5爬虫?

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

    网络上[3]找了一个架构图

    反爬检测小结(1)
    爬虫架构

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

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

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

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

    浏览器插件

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

  • 怎么"反恶意爬虫"?

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

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

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

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

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

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

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

总结

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

反爬检测小结(1)
数据流

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

参考资料

[1]

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)

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年12月17日15:14:04
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   反爬检测小结(1)http://cn-sec.com/archives/682511.html

发表评论

匿名网友 填写信息