V 友们有没有防止灰产爬虫的方法? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
zhuwd
V2EX    程序员

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

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

    公司平台每天都会被灰产爬到很多数据,用的代理池和大量真实用户帐号,模拟登录并直接请求接口,请教 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
    公司什么平台可以发一下.

    不看具体的也不好分析
    Dragonish3600
        5
    Dragonish3600  
       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
    fnk99  
       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  
    PRO
       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     Solana     947 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 19:44 PVG 03:44 LAX 12:44 JFK 15:44
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86