V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
chochox
V2EX  ›  Python

反爬虫业务安全简介

  •  
  •   chochox · 2019-07-02 16:55:06 +08:00 · 4450 次点击
    这是一个创建于 1732 天前的主题,其中的信息可能已经有所发展或是发生改变。

    反爬虫风控业务

    起源

    爬虫在这个大数据时代已经不是什么新鲜事儿了,之前我们说的爬虫可能就是说网页的爬虫,用来建立网页索引,在数据分析和机器学习火热的当下,互联网上面的爬虫那就更加普遍了,这些爬虫日日夜夜的爬取数据,这就导致部分行业成为了爬虫的重灾区:

    • 火车飞机票务
    • 金融行情数据
    • 区块链要闻
    • 简历个人信息
    • 房屋商品价格
    • 门票演唱会
    • ...

    据统计互联网上绝大多数的流量都是机器的流量,这部分流量有多大呢,占据了互联网的半壁江山:51%。

    这些流量中有些是 “失控” 的,是 “野蛮” 的。

    蚂蚁吃大象。2019 年的 4 月中旬,进了一个数据矿工的群组,里面近千号人,都在热聊一件事,都在讨论一个开源的项目,这个项目是关于如何绕过 XX 公司的爬虫防护策略的,他们利用这个工具爬取了文书网,之前我对文书的站点不是很了解,后来才知道是一个政府开放的查询个人传票信息的,这个网站在 4 月中旬发布公告停机升级,过了几天发现文书网更换了反爬虫供应商,之前网站被爬的无法对外服务了。

    残酷的竞争。互联网广告和游戏这一块是重要的赢利点,前提是你要拥有众多的用户群体,你才能参与进这样的揽金行业。马蜂窝与携程都拥有国内旅游信息业务板块,两者曾经出现了 “携程起诉马蜂窝恶意爬取其游记和旅游评论信息” 这样的微博热文,这样的商业竞争行为在互联网上还有很多,大家都是为了 “争” 业务,“抢” 用户。

    恶意报复。携程算是在反爬虫领域做得比较早的一家企业了,发布的关于反爬虫的认知方面的材料也很有深度和见解,携程最早是因为被爬挂了,所以才有对于反爬虫的诉求。

    抛开业务价值不说,光就这 51% 的流量,也会给企业带来额外的经济成本。再算上爬虫的安全漏扫、信息价值流失,爬虫在无形之中大量盗用企业的信息资产,却很少引起企业的关注。

    反爬虫我们要防御什么

    反爬虫业务的三大威胁是刷量、占用资源、信息资产盗取。

    刷量在广告、娱乐行业,比较典型按点击点付费的场景,因为是按量进行结算,结算方或者其他第三方可能会利用爬虫去刷量。刷量方法有机器刷量和人工刷量两种,其中机器刷量成本相对更加低廉,被各种中间平台广泛采用。

    占用资源。恶意爬虫访问会占用很多服务器资源,有些服务商的站点或者服务并没有储备太多额外的业务并发,恶意爬虫可能就会造成服务商的原服务受影响,导致正常正常用户访问速度变慢访问速度变慢,甚至服务商服务直接崩溃。

    信息资产盗取。盗取在新闻、机票素材、直播等行业,存在很多原创有价值的内容,黑产经常会盯上这些内容然后通过爬虫进行倒卖赚中间的差价,严重影响原服务商和创作者的积极性。

    反爬虫技术防御视角

    很早之前,互联网上并没有反爬虫一说,但是随着爬虫的肆虐,反爬虫的技术早已在悄然发展,举几个常见的反爬虫的手段:

    • IP 频率限制
    • UA 频率限制
    • API 数据加密
    • 数据蜜罐
    • 前端数据收集
    • 账户权限

    以上都是我们常见的反爬虫的手段,只是以前这些东西没有被关联上 “反爬虫” 风控业务。

    反爬虫安全威胁是从前几年前才进入大家的视线,被认为是继应用层防火墙 WAF 之后的业务层防火墙。国内竞争可能不明显,但是在国外,频频有关于反爬虫业务安全公司被 WAF 厂商收购的消息,其中最大的两家 Distil 和 ShieldSquare 在今年内被收购了,绿盟 WAF 同样也在今年内规划了反爬虫的功能。

    反爬虫的挑战在哪里?

    传统反爬虫方案也有,但是大厂还在不断改进,规划新版本,大家都没闲着,到底是因为什么?反爬虫业务面临着什么样的挑战?

    传统方案难以应对分布式爬虫。当前分布式爬虫应用随着云服务的兴起,也流行了起来,很多开源的爬虫方案都能够很好的支持分布式爬取。这种爬虫拥有大量的 IP、UA、账号、设备等资源,传统方案的灵敏度,数据维度,资源池都受到严重的挑战,没有大数据和机器学习算法的参与,很难从中间寻找到蛛丝马迹。

    数据采集难度大。反爬虫业务贯穿整个数据链路,从设备环境、网络传输、应用层协议、业务特性等层面参与检测,传统的反爬虫方案主要集中在资源的一个点上面,而且防御大多与业务结合的太过于紧密,很难实现灵活的策略,最大的问题是前端数据采集聊胜于无,我们知道很大一部分爬虫部署在云端,使用了大量的代理,在没有 GUI 的状态下疯狂的爬取数据,但是我们就是找不到足够的证据,更无从防御。

    总结下来:

    • 云服务器检测
    • 代理检测
    • 真人识别
    • 协议分析
    • 数据频率
    • 账号团伙
    • 设备团伙
    • IP 风险

    这些业务诉求都对传统的方案提出了重大的挑战,也是反爬虫风控业务面临的新技术挑战。

    反爬虫防御现状

    市面上已经有几家不同的反爬虫防御厂商的产品,下面简单介绍下大家的反爬虫思路:

    • 利用 IP 和 UA 防护。

    这类产品很多云 WAF 厂商都用,优点是开发成本小、策略简单,缺点是数据要更新及时、误封率极高,某些情况下还不如用户自己的账号权限、接口频率来的实在。

    • 利用加密 JS 和动态 URL。

    这个方案是一个比较新奇的思路,通过动态刷新 JS 来提高破解难度,通过动态 URL 导致爬虫找不到正确的 URL,也就无法访问数据。。该方案可以干掉绝大多数的爬虫,但是却无法很好的保护数据接口,因为需要执行 JS。另外对于搜索引擎的杀伤力巨大,搜索引擎就是一个爬虫,他哪里知道你的动态 URL ?对于模拟器也没有什么防御效果。这个方案一旦被破解了 JS,市面上所有使用了该产品的用户都会被破解。

    • 利用机器学习产生统一设备指纹。

    这个方案的优势在于从设备角度标识用户,保证同一个设备无论在什么环境下访问网站都可以产生同一个设备指纹,然后通过该设备指纹对接口限制频率,再通过时序检测分析出各个有害的设备进行拦截。这样可以在全网建立一个比较大的设备指纹库,策略简单有效。。方案最大的问题就是方案本身,哪里去找到这样一个设备指纹,目前基本上没法 100% 标识一个设备,另外对于中国网吧这样统一装机的,我怕大家都会懵逼。

    • 通过动态 HTML。

    通过使用 CSS tricky 和 动态 HTML 的内容导致爬虫无法准确提取到关键数据来进行反爬,即使数据被爬取了,但是爬到了错误的数据,也就没有继续爬取的必要了。本质上是防御爬虫数据使用场景,该方案多见于内容型的业务,比如微信文章,招聘网站的电话号码等。

    • 利用数据链路和流量观测进行分析。

    对于一个用户的所有访问请求进行时序关联分析,发现恶意有风险的操作行为,配合验证码对用户的访问行为进行图灵测试。该方案对于技术要求难度比较大,但是对抗性比较强、误封率低,缺点是如果出现误封了,那么用户体验性等于 0,配合数据蜜罐的话,该方案能优化不少。比如有风险,返回 10 条数据,没风险返回 100 条等。

    本篇主要介绍了下背景和现状,如果觉得我写的不错,就多多鼓励,后续持续连载介绍关于反爬虫技术的各个环节。

    在线检测爬虫: 免费在线检测

    15 条回复    2019-07-08 00:32:55 +08:00
    lihongjie0209
        1
    lihongjie0209  
       2019-07-02 18:01:50 +08:00
    在线爬虫检测的原理是什么? 直接下载 html 的话不会加载你的 js, 怎么做到检测的?
    chochox
        2
    chochox  
    OP
       2019-07-02 18:38:50 +08:00
    @lihongjie0209 通过 js 发送请求来检测的,云端会综合 JS 采集和数据和协议进行分析,这个在线版本的话,如果不加载 js 的话就不能检测了,其他防护版本可以针对你说的这个场景进行检测
    gunjianpan
        3
    gunjianpan  
       2019-07-02 19:31:56 +08:00
    @lihongjie0209 通过 LB 层来做处理
    arthasliu
        4
    arthasliu  
       2019-07-03 10:51:11 +08:00
    跨站 js 谨慎加载,你压根不知道这段 js 对你的用户干了啥。
    aWangami
        5
    aWangami  
       2019-07-03 12:11:28 +08:00 via Android
    @chochox 大部分都是直接爬 html 或者接口吧,怎么会去加载你的 js 呢?爬虫检测要做也更应该是做在服务端吧
    aqqwiyth
        6
    aqqwiyth  
       2019-07-03 15:22:49 +08:00
    一般我的做法是识别出爬虫了, 喂一点假数据 比如机票本来是 1000$ 给他一个 10$ 或者 10000$ 真真假假 干扰他
    chochox
        7
    chochox  
    OP
       2019-07-03 16:53:07 +08:00
    @aWangami 对啊,正常用户都会去加载 js 然后爬虫就不会,那不就是抓到了
    chochox
        8
    chochox  
    OP
       2019-07-03 16:53:24 +08:00
    @aqqwiyth 这个做法很棒呀
    aWangami
        9
    aWangami  
       2019-07-04 01:59:17 +08:00 via Android
    @chochox 那你这个只用前端网页接入就好了还是后端也要接入呢?
    chochox
        10
    chochox  
    OP
       2019-07-04 10:47:03 +08:00
    @aWangami 如果只是简单分析看看大概情况,前端分析就可以了,如果想要更加准确和全面的覆盖,我们也支持后端分析,后端分析可以是日志,也可以直接反代接入
    chochox
        11
    chochox  
    OP
       2019-07-04 11:06:31 +08:00
    @arthasliu 就像你去买票要交身份证一样,能拿到的信息是你的身份号,地址,姓名,JS 采集数据同样也是拿到你浏览器和访问网站的情况这些东西,能做什么了
    aWangami
        12
    aWangami  
       2019-07-04 12:00:10 +08:00 via Android
    @chochox 前端接入没用呀,需要后端配合吧?接入前端 SDK 可以知道哪些人是正常访问(加载了 JS),但是怎么知道哪些人不是正常访问(没加载 JS),这个不是应该后端配合才能检测出来的吗?
    aWangami
        13
    aWangami  
       2019-07-04 12:01:16 +08:00 via Android
    @chochox 他说的是安全性问题,随便加载别人的 JS 可能会被跨站攻击
    chochox
        14
    chochox  
    OP
       2019-07-04 14:59:14 +08:00
    @aWangami 前端接入效果不是很好,是需要配合后端接入,这个站点后续会开放越来越多的接入方式。 这个有个群可以交流 727982278
    sml2h3
        15
    sml2h3  
       2019-07-08 00:32:55 +08:00
    关于文章中的数据矿工群,给大家分享一下,大家可以来互相交流一下反爬与反爬虫的技巧:119794042
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3394 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:40 · PVG 18:40 · LAX 03:40 · JFK 06:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.