V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhuwd
V2EX  ›  程序员

V 友们有没有防止灰产爬虫的方法?

  •  
  •   zhuwd · 2020-04-24 11:08:40 +08:00 · 7022 次点击
    这是一个创建于 1656 天前的主题,其中的信息可能已经有所发展或是发生改变。

    公司平台每天都会被灰产爬到很多数据,用的代理池和大量真实用户帐号,模拟登录并直接请求接口,请教 V 友大佬有啥应对策略吗

    55 条回复    2020-04-27 09:52:21 +08:00
    winnerczwx
        1
    winnerczwx  
       2020-04-24 11:42:35 +08:00 via iPhone   ❤️ 1
    1.先把大规模访问的账号封掉一批。
    2.限制账号注册,提升注册门槛,比如手机号认证
    3.账号访问频率限制
    4.前端获取 api 时加个 js 加密的字段,可以防新手
    5.前端拉取 js,css 的时候可以缓存 ip 或账号数据,如果获取 api 之前没拉取 js.css 就不返回数据
    6.如果你的数据真的有价值,总有大佬会出现的,别挣扎了,给爬完拉倒

    剩下的等楼下大佬补充
    mrzx
        2
    mrzx  
       2020-04-24 11:44:07 +08:00   ❤️ 4
    总之原理就是同一个 ip 地址在多少 X 秒钟访问同一个 url 就禁止一段时间。

    代理池的 ip 总是有限的吗?你把禁止时间调的长一些,把判断规则方式在改进一下(稍微宽松点,减少误判)。

    时间上一禁就禁一天,你看看他有多少地址池可以用?

    最多后期就是跟你玩猫捉老鼠,猜测你的规则,从而延长扫描时间的间隔。。但如果真的把扫描间隔的时间拉的很长,扫描你的平台成本过高,他们也会考虑考虑的。。。

    你不可能阻止别人爬你的数据的(除非你对外不公开服务),只能增加他的成本。。。到他觉得成本高到爬你不划算。。。
    sparrww
        3
    sparrww  
       2020-04-24 11:44:34 +08:00
    有价值的数据,注册才能访问,限制账号单位时间请求次数。
    没价值的,接口加个随机 token,别人也没心情去看你 js 怎么生成的
    gz911122
        4
    gz911122  
       2020-04-24 12:04:31 +08:00
    公司什么平台可以发一下.

    不看具体的也不好分析
    ladypxy
        5
    ladypxy  
       2020-04-24 12:05:54 +08:00
    最简单的,上 Cloudflare,然后开启反 bot
    如果面向国内?那参考楼上的
    aWangami
        6
    aWangami  
       2020-04-24 12:11:54 +08:00 via Android
    给他投点毒
    opengps
        7
    opengps  
       2020-04-24 12:14:11 +08:00 via Android
    真重要的接口就来个活体验证
    abcbuzhiming
        8
    abcbuzhiming  
       2020-04-24 12:14:12 +08:00
    多管齐下:
    *技术手段楼上说了不少,我就不多说了。
    *既然真实用户存在,封真实用户,并且要求新注册用户提交更详细的个人资料,反向钓鱼
    *查对面的真实身份,查到了就发律师信。现在对灰产爬虫管的很严的
    renmu
        9
    renmu  
       2020-04-24 12:14:31 +08:00 via Android
    数据投毒,增加复杂验证码,接口关键字段加密
    lasuar
        10
    lasuar  
       2020-04-24 12:18:29 +08:00
    2 的想法太简单了。如果用了商业代理,你只能认为代理池 IP 是无限的。反爬要从技术上来解决,可以参考商标网,如果没条件请专门的反爬工程师,那就自己去学习爬取途径再研究反爬措施。
    Cmdhelp
        11
    Cmdhelp  
       2020-04-24 12:30:32 +08:00
    最重要的是 提高注册难度,
    通过账号限制目前比较有效,
    告诉你靠 ip 是没用的,代理池可能一个 ip 用几次甚至一次就弃用了,

    账号采集频率,异地登陆频率,直接封号,返回脏数据(这个比封号恶心)
    endoffight
        12
    endoffight  
       2020-04-24 12:30:38 +08:00 via Android
    1,加上 cf 的验证
    2,12315 的验证码
    3,js 监控特殊变量,防止模拟浏览器
    4,随机返回假数据

    以上能解决 90%的爬虫
    aiquit
        13
    aiquit  
       2020-04-24 13:06:32 +08:00
    我之前做过语音验证码,返回一段话,你得把这段话念出来才可以通过验证。。。
    jakezh
        14
    jakezh  
       2020-04-24 13:14:51 +08:00 via iPhone   ❤️ 1
    @aiquit 这是最没用的验证码
    文字转语音 api 可破 还不如 captcha
    lmoon
        15
    lmoon  
       2020-04-24 13:17:28 +08:00 via Android
    用谷雨解字
    wszgrcy
        16
    wszgrcy  
       2020-04-24 13:30:15 +08:00 via Android
    puppeteer 无解吧?就算加验证码,也可以使用半人工方式解决。。。当然要看这个网站价值多大了
    fancy111
        17
    fancy111  
       2020-04-24 13:33:14 +08:00
    先去学学淘宝价格怎么反爬的吧
    triangle111
        18
    triangle111  
       2020-04-24 13:39:07 +08:00
    看看四库一平台是咋反爬的呗
    Fizzyi
        19
    Fizzyi  
       2020-04-24 13:44:10 +08:00
    @triangle111 AES 加 网易易盾呗
    Fizzyi
        20
    Fizzyi  
       2020-04-24 13:44:44 +08:00
    @triangle111 还有 IP,限制能看的条数
    xiaxichen
        21
    xiaxichen  
       2020-04-24 13:47:20 +08:00
    无解的。
    rekulas
        22
    rekulas  
       2020-04-24 13:47:20 +08:00
    加 google 的选择验证码 连人都通不过 100% :)
    zdnyp
        23
    zdnyp  
       2020-04-24 13:53:14 +08:00
    都不考虑真实用户体验的吗?
    xxx 真恶心,现在注册还要 xxx 验证;刷新了几遍网页一天不能访问;还有返回假数据的...;这些能拦住一些小白,受影响的还是普通用户。
    反爬的目的在于爬虫难拿到数据,不是增加爬虫的访问难度。登录、验证、数据加密是常用手段,不打扰用户的前提下挡住大部分爬虫。
    剩下的一部分高手,数据给他吧。
    爬虫和反爬虫永远是攻防战,没有无坚不摧的防御也没有锋利无比的刀刃,博弈而已,看谁的代价更大。
    augustheart
        24
    augustheart  
       2020-04-24 14:02:47 +08:00
    攻防攻防,静态的防是永远落后于动态的攻的。
    顶多就是看谁耗死谁。
    adminPUBG
        25
    adminPUBG  
       2020-04-24 14:22:52 +08:00   ❤️ 2
    @zdnyp 有道理,爬虫和发爬虫就是矛和盾的关系,也不存在一劳永逸的方法,说 IP 池的,我们现在用的 IP 池,一天能获取 200 多万不重复的 IP,重复调用能到 3000 多万次,而且这些 IP 都是普通的住宅 IP,有很多真实用户就是用的这些 IP,没办法在不影响正常用户的情况下封爬虫的,只能说你提高爬虫获取数据的成本,到它无路可图的地步,就像薅羊毛的一样,它成本高了,自然就不来薅你了,否则是防不住的。
    rain0002009
        26
    rain0002009  
       2020-04-24 14:25:49 +08:00   ❤️ 1
    突然想到像 puppeteer 这种真的拿个浏览器访问的 咋办呢
    copymaster
        27
    copymaster  
       2020-04-24 14:44:00 +08:00 via Android
    吐假数据啊
    a516307724
        28
    a516307724  
       2020-04-24 14:50:29 +08:00
    该做的小说网站都做了。然而。。。
    fank99
        29
    fank99  
       2020-04-24 14:53:34 +08:00
    此时路过了一名爬虫工程师。
    DelayNoMay
        30
    DelayNoMay  
       2020-04-24 14:56:34 +08:00
    此时路过了一名反反爬虫工程师
    zary
        31
    zary  
       2020-04-24 15:02:52 +08:00
    1 、js 核心逻辑混淆、埋逻辑陷阱
    2 、请求字段 RSA 、AES 加密
    3 、针对频率封禁
    4 、重要业务场景(登录注册)上验证码
    zgzhang
        32
    zgzhang  
       2020-04-24 15:03:22 +08:00   ❤️ 2
    @mrzx @zhuwd 常年从事安全风控工作,说一下几点建议:
    1. 不要做 IP 维度的对抗,黑灰产的 IP 资源早已不是来源于代理 IP,细节请搜索秒拨机
    2. 增加黑灰产获取新用户的难度,注册环境各种图灵测试,针对虚拟号段的打击等手段,解决了用户问题,就解决了一半问题
    3. 针对存量垃圾用户可以返回结果投毒,裁剪,不建议直接拉黑
    4. 风控策略要尽量后置多变,不要被摸清楚规律
    5. 最后如果数据敏感 可以收集证据走法律途径
    dearmymy
        33
    dearmymy  
       2020-04-24 15:12:00 +08:00   ❤️ 6
    首先你要认识到没啥一劳永逸的方法。我大概说下我了解的。
    1,如果是客户端的话可以做一些加密。但是网页基本没什么特别好的办法。js 加密就是效果也是一般,不过你说了对方是发包的。你 js 加密可以经常换换,也能恶心死他们。
    2,限制 ip,账号手机注册,验证码,这些你基本可以放弃,ip 池子便宜的要死,手机接码网站也一大堆,验证码,高中没毕业的学个几天,就能搞个机器学习去识别,还影响用户体验。
    3,还有一个恶心的办法,针对于发包来说,他们只会发关键的包。你可以在登录后的前端里插入一些小图片之类的,对这小图片进行检测。如果他没发这个请求,就默认他机器人。
    4,作为搞逆向这么多年,有个很重要的规则,不要给对方明确反馈,最好能拉长反馈时间。比如你已经检测到了他是机器,就别百分百反馈给他获取接口失败,你可以随机反给他,比如 5 次反给他一次。让他不知道怎么回事。
    攻防是长期事情,也没必要打死。。。。毕竟你们互怼的时候,既学习了技术,也创造了你俩岗位和 kpi 。要不你俩都得被裁
    z888888cn
        34
    z888888cn  
       2020-04-24 15:22:32 +08:00
    终极解决方法:看页面请先支付 1 毛钱。
    viewsnake
        35
    viewsnake  
       2020-04-24 15:32:50 +08:00
    @z888888cn 哈哈哈
    kasper4649
        36
    kasper4649  
       2020-04-24 15:40:49 +08:00 via Android
    @z888888cn 这个厉害了
    eoo
        37
    eoo  
       2020-04-24 15:58:19 +08:00
    @z888888cn 牛逼+1
    mrzx
        38
    mrzx  
       2020-04-24 16:45:40 +08:00
    @adminPUBG 有一些不了解,忘解答。

    地址池能获取 200 多万个不重复的 ip 地址,而且都是普通的住宅 ip,你指的是公网地址还是私网地址?
    如果是私网地址,也不需要获取,随便定义即可。
    如果是公网地址,难道这些地址平时都不在线的吗?而且很多 ipv4 地址都不够用,运营商都是搞大内网 nat 过去的。

    从网络的角度考虑,你既然要收数据,总要回数据包吧,爬虫发过去的数据包源地址应该就是代理池里这些地址吧?
    如果这些公网 ip 地址原本就已经被占用了,从路由层面怎么保证回到你的代理 ip 池这里呢?
    mrzx
        39
    mrzx  
       2020-04-24 16:50:45 +08:00
    @zgzhang 搜了一下,秒拨机就是利用宽带账户提供的 pppoe 拨号机制,每次换一个公网 ip 地址吗,但是这种地址池普遍不是很大。
    我做过运营商的项目,BRAS 的服务器(你可以理解成 pppoe 服务器)我都亲自配置过,也没见分配多大的 IP 地址池吗?
    早起普遍都是 juniper e 系列设备,现在都换成了华为 me60 系列。。

    难道秒拨机还有其他的方式制作?还是向运营商偷偷买了什么服务?
    ClericPy
        40
    ClericPy  
       2020-04-24 16:54:21 +08:00
    反爬虫就像 CSGO 的反作弊, 只要是免费的, 就有一群人本着 "学习" 的目的来尝试, 每次进游戏看到一群小号就烦
    zgzhang
        41
    zgzhang  
       2020-04-24 17:08:27 +08:00
    @mrzx 问题的点不在于池子有多大,而是这种 IP 可能会被重新分配给正常用户,如果你的应用体量很大,这样引发的客诉是不可控的
    freeup
        42
    freeup  
       2020-04-24 17:09:16 +08:00
    可以接入第三方反爬虫 比如 极验
    freeup
        43
    freeup  
       2020-04-24 17:10:46 +08:00
    但是无论怎么搞 总会有大佬能破 只能尽可能减少被爬的风险
    clague
        44
    clague  
       2020-04-24 17:15:31 +08:00 via Android
    谷歌验证码,不过对正常用户的体验损坏也很大。
    mrzx
        45
    mrzx  
       2020-04-24 17:21:15 +08:00
    @zgzhang 嗯,明白了,误伤率很高吗。

    因为我做过类似项目,我们对地址池的划分都是严格按照运营商的的区域进行划分的,最多按照客户数量的 90%来分,比如该区域有 1 万个用户,早期我们给的地址池就 9000 个,实际我们测过,持续在线的客户数量平均只有 60%。也就是说,这地址池里,同一时间最多 3000 个地址能供秒拨机来使用啊。。。当然,实际情况会更小。上面说有几百万个不重复地址,我就在想它怎么来的?除非对方办了不同区域,且办理 n 个宽带。。

    我最多一个区域也就分配一个 B 的地址段而已。。。。
    heiheidewo
        46
    heiheidewo  
       2020-04-24 17:22:28 +08:00
    哈哈,爬站无数,除非你限制账号访问,否则无解
    zgzhang
        47
    zgzhang  
       2020-04-24 17:29:45 +08:00   ❤️ 1
    @mrzx 现在的 IP 地址供应商基本上都是会在 N 个地区用不同用户办理 N 很大的宽带,提供给客服的基本上是 VPS 或者是一个 VPN 账号,实际上就是把他的网络资源云化了,客户甚至可以通过接口指定出口 IP 的区域,类似这种 https://www.kuaidaili.com/
    gz911122
        48
    gz911122  
       2020-04-24 17:34:26 +08:00
    @zgzhang 这个不错...收藏了.
    mxT52CRuqR6o5
        49
    mxT52CRuqR6o5  
       2020-04-24 17:35:52 +08:00 via Android
    我有个不靠谱的想法,如果判断出是爬虫可以返回正确格式的假数据,让爬虫很难判断自己有没有失效,污染对方爬到的数据,不过感觉风险很大不靠谱,如果影响正常用户会造成损失
    darksand
        50
    darksand  
       2020-04-24 17:37:46 +08:00
    @dearmymy 最后一条太毒了
    newmlp
        51
    newmlp  
       2020-04-24 17:49:59 +08:00
    接口请求参数加密一下啊
    mrzx
        52
    mrzx  
       2020-04-24 18:04:01 +08:00
    @zgzhang 谢谢,第一次听说这种骚操作。。学习了,除非运营商的 bras 服务器针对这种方式做限制。
    HUALIAN
        53
    HUALIAN  
       2020-04-25 13:14:48 +08:00
    接入滑块验证码和加密 js 验证参数是最有效的
    forgottencoast
        54
    forgottencoast  
       2020-04-25 16:33:48 +08:00
    @zgzhang 这个网站不违法吗?怎么就不需要整改了?手工狗头。
    darksand
        55
    darksand  
       2020-04-27 09:52:21 +08:00
    @adminPUBG 求教一下,大佬的 ip 池是怎么搭建的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3060 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 13:46 · PVG 21:46 · LAX 05:46 · JFK 08:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.