V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
oldManPushCar666
V2EX  ›  信息安全

求助,怎么防止 API 接口被刷

  •  1
     
  •   oldManPushCar666 · 2020-06-10 09:49:37 +08:00 · 7253 次点击
    这是一个创建于 1625 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我们公司线上服务这几天有一个不需要登陆的接口总是遭到别人的恶意高频刷,对方使用的是高匿代理 ip,所以查不到对方的真实 ip 。有没有大佬知道有什么好方法呢?(产品说加验证码影响用户体验,所以加验证码的方式暂时不考虑)
    39 条回复    2020-06-16 13:15:04 +08:00
    RJH
        1
    RJH  
       2020-06-10 10:01:08 +08:00
    根据 IP 搞个限流试一下,例如每个 IP 每分钟请求 60 次之类,这个你可以根据业务来估算一下。
    liamyoung
        2
    liamyoung  
       2020-06-10 10:31:17 +08:00   ❤️ 1
    接口加签名
    oldManPushCar666
        3
    oldManPushCar666  
    OP
       2020-06-10 10:31:50 +08:00
    还有一个问题,这种刷我们接口的应该可以算不正当竞争,他们造成了我们的网站加载慢,甚至打不开的话,可以通过报网警可以抓到他们吗?
    hicdn
        4
    hicdn  
       2020-06-10 10:50:47 +08:00
    公开 API 只能对 IP 限制频率
    raynor2011
        5
    raynor2011  
       2020-06-10 10:51:38 +08:00
    根据浏览器特征机器特征过滤垃圾流量
    xooass
        6
    xooass  
       2020-06-10 11:07:44 +08:00 via Android
    @oldManPushCar666 既然是匿名 IP 怎么抓,不是 xxx 督办的事情他们不会费劲去查 IP 的,那么容易被查到的话,就没人冒险去刷你了
    di1012
        7
    di1012  
       2020-06-10 11:21:45 +08:00
    请求环境限制,机器刷和正常环境请求还是有区别的
    Vegetable
        8
    Vegetable  
       2020-06-10 11:24:27 +08:00
    代理 IP 才能有多少个?没有什么代理能够承受的住高频刷的,你根据 IP 限流就好了。
    Ariver
        9
    Ariver  
       2020-06-10 11:24:34 +08:00
    可以在访问你们页面的时候服务器生成一个一次性的 token,然后请求你们这个 api 的时候必须带上这个 token.
    -----
    然后在这个 token 生成的时候你应该就有很多方法来区分正常的用户和恶意的了。
    af463419014
        10
    af463419014  
       2020-06-10 11:29:12 +08:00
    1.不需要登录的接口,只能用 ip 限频率
    2.可以给接口在前端加一些签名校验,虽然是防君子不防小人,但在减小流量上还是有一些用的
    2.如果是考虑到服务器负载影响其他接口,可以把登录后的接口和不需要登录的接口分开部署.保证登录后的接口稳定
    locoz
        11
    locoz  
       2020-06-10 12:46:28 +08:00
    1 、如果量非常大,已经影响正常服务了,那可以直接报警,警察可以顺着 IP 查到代理 IP 商,并且通过代理 IP 商找到对应的人。
    2 、如果量没有大到那种程度,但有一定的影响,那就看情况使用设备指纹 / 无感知验证码服务 或 自己搞高难度加密参数。
    3 、按照正常用户的使用情况进行限流,每分钟 /每 xx 分钟 x 次,简单粗暴。
    locoz
        12
    locoz  
       2020-06-10 12:51:08 +08:00
    @Vegetable #8 稍微大点的代理 IP 商手上都有个几千万 IP 的池子,IP 还是一直在更新的...“才能有多少个”有点太天真了
    xingyue
        13
    xingyue  
       2020-06-10 13:02:12 +08:00 via Android
    @locoz 几千万?
    renmu123
        14
    renmu123  
       2020-06-10 13:07:26 +08:00 via Android
    如果有的话,那爬虫工程师都得失业了
    Vegetable
        15
    Vegetable  
       2020-06-10 13:23:55 +08:00
    @locoz #12 说啥呢啊,IP 是海边的沙子随便捡吗?不花钱买的吗?
    oldManPushCar666
        16
    oldManPushCar666  
    OP
       2020-06-10 13:58:17 +08:00
    @Vegetable 代理确实是需要成本的,但是刷我们接口人每天更换 ip1000 个左右还是有的
    sparrww
        17
    sparrww  
       2020-06-10 14:04:12 +08:00
    @Vegetable 随便一个 ip 代理商没个万把 ip,能拿得出手运营吗。你以为用自己的机器,没几个 ip 吗
    C603H6r18Q1mSP9N
        18
    C603H6r18Q1mSP9N  
       2020-06-10 14:05:10 +08:00
    阿里云 WAF 了解下,是钱可以解决的问题
    Vegetable
        19
    Vegetable  
       2020-06-10 14:07:19 +08:00
    @oldManPushCar666 #16 一千个 IP,每分钟可用 IP 数量不到 1 个。该接口每个 IP 限速一分钟不得超过 10 次,20 次,60 次,这样你系统能负担的了吗?
    locoz
        20
    locoz  
       2020-06-10 14:09:45 +08:00
    @xingyue #13
    @Vegetable #15
    确实就是“几千万 IP”,你们没有看错...只是有些是他们一天刷出来的量、有些是他们一小时刷出来的量、有些是实时可用的就有几千万,“稍微大点的代理 IP 商”对应的是一天刷出来的量有几千万。
    别觉着一天几千万少...光是 2000WIP 就能做到一秒 200+并发地刷都不带重复的了
    Vegetable
        21
    Vegetable  
       2020-06-10 14:16:42 +08:00
    @locoz #20 这样的产品价格都挺感人了吧,我有的产品同时可用的就 3~5 个,正常使用其实都够了
    locoz
        22
    locoz  
       2020-06-10 14:17:06 +08:00
    @locoz #20 补充一下,之前我有篇文章介绍过(国内)代理 IP 商们的 IP 来源,可以看看: https://mp.weixin.qq.com/s/926AKX_EVQNmthBBTpWS4Q

    另外按 @oldManPushCar666 #16 的说法,1000 个左右的程度基本可以忽略,用限流的方式就可以简单粗暴地解决。
    locoz
        23
    locoz  
       2020-06-10 14:20:13 +08:00
    @Vegetable #21 200+并发还好吧,隧道代理一般对应的价位是一个月 1-3W
    DJQTDJ
        24
    DJQTDJ  
       2020-06-10 15:54:12 +08:00
    可以在你所说的那个不需要登陆的窗口里面安装 google recaptcha 或者你重写一个也行,安全等级设定为最高
    DJQTDJ
        25
    DJQTDJ  
       2020-06-10 15:55:24 +08:00
    @DJQTDJ 再就是你装证明书,安装签名,机器地址 ip 过滤,把借口变成只有服务器本地才能用,顺便外面弄个类给套上。
    suckli
        26
    suckli  
       2020-06-10 16:24:19 +08:00
    鉴权+根据真实使用场景限制频率
    NoString
        27
    NoString  
       2020-06-10 17:05:50 +08:00
    签名认证 apiKey ip 请求池 完整 api 网关都有这些功能的
    zgzhang
        28
    zgzhang  
       2020-06-10 17:22:20 +08:00
    @oldManPushCar666 你们的产品怕不是没被锤过,这个情况最合理的方式是针对 99%的正常用户不谈验证码,剩下的高频访问 IP 怎么恶心怎么来,验证码+返回裁剪+投毒
    zgzhang
        29
    zgzhang  
       2020-06-10 17:25:44 +08:00   ❤️ 2
    说个真实的例子,用户注册登录的接口,产品经理打着用户体验的大旗,不让加验证码甚至拒绝接入风控+验证码的方案,上线一个周被刷了几 W 块,后面半夜给我们打电话声音都是抖的
    hopingtop
        30
    hopingtop  
       2020-06-10 17:32:56 +08:00
    对于高频访问 IP,直接返回缓存数据或者投毒,让调用者认为他目的达到就行了。玩心理战, 代理池也是有一定成本的。对方大概率不会每次请求就使用代理。特别是当他访问畅通时。代理可能就不会用。
    akira
        31
    akira  
       2020-06-10 17:44:34 +08:00
    任何防刷都是 提高对方的成本 , 验证码是最基本的一条。。
    locoz
        32
    locoz  
       2020-06-10 17:53:44 +08:00
    @zgzhang #29 哈哈哈哈哈哈被刷了几万块就很惨
    dallaslu
        33
    dallaslu  
       2020-06-10 18:58:55 +08:00
    接口要加验证码????
    cest
        34
    cest  
       2020-06-10 19:00:15 +08:00
    @locoz #32 开了一周才检查
    里应外合
    各种花式坑金主
    坑完再装傻白甜,再坑几次,能坑多少算多少
    locoz
        35
    locoz  
       2020-06-10 19:15:26 +08:00
    @dallaslu #33 像阿里就有这种操作,风控检测到异常时接口直接给你返回个验证码链接...
    locoz
        36
    locoz  
       2020-06-10 19:15:34 +08:00
    @cest #34 牛逼
    mmdsun
        37
    mmdsun  
       2020-06-10 19:40:17 +08:00 via Android
    Google reCAPTCHA v3 用户无感知验证码
    chipuheado
        38
    chipuheado  
       2020-06-13 02:20:10 +08:00
    他们刷东西的代理 ip 应该都在 cf 黑名单上,检测到就会要求 recaptcha
    ximoer007
        39
    ximoer007  
       2020-06-16 13:15:04 +08:00
    上专业的 API 网关进行防护
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1117 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 18:40 · PVG 02:40 · LAX 10:40 · JFK 13:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.